Mug*_*nth 77 iphone cocoa-touch core-data
这可能看起来很愚蠢,但我仍然无法弄清楚如何将属性标记为xcdatamodel文件中的主键.我的持久存储是sqlite文件.谁能帮我?
在这种情况下,我如何"验证"ID是唯一的?我应该写一个验证方法吗?
Mik*_*lah 89
你的选择是:
-[NSManagedObject objectID].请注意,此ID是临时的,直到第一次保存对象或您调用-[NSManagedObjectContext obtainPermanentIDsForObjects:error:]CFUUID函数族为-awakeFromInsert方法中的每个对象生成UUID没有好的方法来验证属性是否唯一.您最接近的是确保它在创建时是唯一的,然后实现一个自定义的setter方法,阻止任何人更改ID.
Mar*_*eau 44
请记住,Core Data是一个对象图持久性框架,而不是数据库.像主键这样的东西被抽象掉了,因为它们依赖于持久存储的实现.
Pau*_*lin 21
核心数据创建自己的主键 - 您不必添加一个.你可以用它来检索它
NSManagedObjectID *moID = [managedObject objectID];
Run Code Online (Sandbox Code Playgroud)
kit*_*ter 14
有时当黑客攻击时需要主键的实际int.这是人们如何抓住它:
NSManagedObjectID *yourManagedObjectID = [yourManagedObject objectID];
int yourManagedObject_PK = [[[[[yourManagedObjectID URIRepresentation] absoluteString] lastPathComponent] substringFromIndex:1] intValue];
Run Code Online (Sandbox Code Playgroud)
尽管CoreData是一个对象图,但如果查看CoreData生成的SQLite数据库数据,这种获取NSManagedObject主键的方法应该不是问题.ii已将CoreData和低级sqlite3 C库一起使用在相同的代码中,并将主键从CoreData传递到sqlite3以获取记录工作正常.
!如果您打算在生产中使用此代码,请注意db主键转换为URIRepresentation的方式可能会发生内部更改,这可能会使您的代码失效.
请享用
| 归档时间: |
|
| 查看次数: |
48912 次 |
| 最近记录: |