如何通过 objectID 关键字查询 CoreData 中的数据?

发布于 2022-09-01 19:47:50 字数 1247 浏览 16 评论 0

我想通过objectID作为关键字来查询CoreData中的数据,并将查到的数据作一些修改,代码是这样的:

let request = NSFetchRequest()
let fetchedID = juzi.objectID.URIRepresentation()
            
request.entity = NSEntityDescription.entityForName("Juzi", inManagedObjectContext: appDelegate.managedObjectContext)
 let predicate = NSPredicate(format: "objectID == %i", fetchedID)
request.predicate = predicate
 do {
      let jz = try appDelegate.managedObjectContext.executeFetchRequest(request)
      print(jz)
} catch {
       print("没有查询到数据。")
}

保存数据时,出现这样的错误:

2015-10-29 17:20:20.543 Meiju[7078:287918] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath objectID not found in entity <NSSQLEntity Juzi id=1>'

我在Stackoverflow上找到这样的贴子,但没太明白是怎么回事。

http://stackoverflow.com/questions/29075910/how-can-i-get-core-data-entity-by-its-objectid

不知道自己在哪里出了问题,还请大家指导下。

感觉这个objectID用法有些奇怪,当然是相对我以前使用Djagno来说的。尽管这个objectID是自动生成的,却又不能直接当成一个字段来用。我在Github上看到的一些代码,也有在数据库字段中直接单设objectID的,而没有使用系统提供的。

ID需要自增涨,如果手动指定的话,明显不太科学,如果是自定义ID的话,如何实现这种自增涨呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

铃予 2022-09-08 19:47:50

objectID是数据一个属性,而非一个字段。因而不能如上面的方式进行查询。

使用managedObjectContext.objectWithID(objectID) 进行查询,拿到数据之后,再对其进行修改,然后再save就可完成数据的查询与更新。

我开始只是把数据查出来了,自以为这种方式不能对数据进行修改,所以没有去尝试,才会提出上面的问题。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文