NSManagedObjectID 到 NSData
我发现了这个美妙的 NSManagedObjectID。 这对于引用 Entity/NSManagedObject/NSEntityDescription 非常有用,对吧?
让我们从实体中获取 ID:
NSEntityDescription *entity = [self newEntity];
NSManagedObjectID *objID = [entity objectID];
那么...知道如何将此 objID 转换为字符串吗? 或者更好:NSData。 实际上可以将其保存到 NSUserDefaults 中。 ;-)
顺便说一句: NSFetchRequest 不想在我的情况下工作。 我使用此示例的修改版本:旧问题的答案。
I found this wonderful NSManagedObjectID. This would be very good for referencing an Entity/NSManagedObject/NSEntityDescription, right?
Let's get an ID from an entity:
NSEntityDescription *entity = [self newEntity];
NSManagedObjectID *objID = [entity objectID];
So... any idea how to get this objID
into a string? Or better: NSData. Actually something to be able to save it to the NSUserDefaults. ;-)
Btw: NSFetchRequest doesn't want to work in my case. I use an modified version of this example: answer of an old question.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
要获取与
NSManagedObject
的objectID
对应的存档 URI:为了返回原始托管对象的实例,您需要一个具有持久存储的 CoreData 堆栈将该实例已添加到
NSPersistentStoreCoordinator
。 然后:To get an archived URI corresponding to a
NSManagedObject
'sobjectID
:In order to get back to an instance of the original managed object, you need a CoreData stack with the persistent store holding that instance already added to the
NSPersistentStoreCoordinator
. Then:来自 NSManagedObjectID 文档:
只需将其转换为 URL,然后将其转换为字符串或数据即可。
From the NSManagedObjectID documentation:
Just turn it into a URL then turn that into a string or a data.
您是否查看过 URI 表示? 将 NSURL 转换为 NSString 以及 NSData 很容易。
Did you look at URIRepresentation? It's easy to convert an NSURL to an NSString, and that to an NSData.
归档前不需要将 NSURL 转换为 NSString。 只需存档 NSURL 即可。
编辑:我最近了解到对象的 ID 可以更改,例如在迁移之后。 因此,将 ID 保存到磁盘并期望稍后能够引用该对象似乎不是一个好主意。
You don't need to convert the NSURL into an NSString before archiving. Just archive the NSURL.
Edit: I've recently learned that an object's ID can change, such as after a migration. It therefore seems like not a good idea to save an ID to disk expecting to be able to reference the object later.
这是我目前发现的最干净、最短的方法,使用 4.0 中添加的
setURL
和getURL
方法来避免对NSKeyedUnarchiver
的额外调用> 和NSKeyedArchiver
:Setter:
Getter:
Here's the cleanest and shortest way I've found to do this currently, using the
setURL
andgetURL
methods added in 4.0 to avoid extra calls toNSKeyedUnarchiver
andNSKeyedArchiver
:Setter:
Getter:
正如@preston所说,不要将 objectID 保存到磁盘,而是:
更干净、更好!
As @preston said, don't save an objectID to disk, instead:
Much cleaner and better!