如何通过 objectID 关键字查询 CoreData 中的数据?
我想通过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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
objectID是数据一个属性,而非一个字段。因而不能如上面的方式进行查询。
使用managedObjectContext.objectWithID(objectID) 进行查询,拿到数据之后,再对其进行修改,然后再save就可完成数据的查询与更新。
我开始只是把数据查出来了,自以为这种方式不能对数据进行修改,所以没有去尝试,才会提出上面的问题。