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

如何通过 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的话,如何实现这种自增涨呢?


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

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

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

【热门文章】
【热门文章】