使用 NSURL 检索托管对象 ID

Posted

技术标签:

【中文标题】使用 NSURL 检索托管对象 ID【英文标题】:Retrieving a managed objects ID with NSURL 【发布时间】:2015-01-15 18:22:14 【问题描述】:

我正在尝试从保存在我的用户默认值中的 NSURL 检索和创建托管对象,但我不知道如何使用 managedObjectIDForURIRepresentation 函数。我的代码如下所示:

func setCoreData()
    let defaults = NSUserDefaults.standardUserDefaults()
    let usedKeyName = "timerList"
    let usedList = defaults.objectForKey(usedKeyName) as? [NSURL] ?? []
    let url:NSURL = usedList[0] as NSURL

    let managedobject:NSManagedObjectID = //What do I write here?


任何建议将不胜感激。

【问题讨论】:

将 objectID 存储在用户默认值中可能不是一个好主意,因为它不能保证在应用程序启动时保持稳定。比较***.com/questions/12218396/…。 @MartinR 您今天早些时候对我的关于在我的自定义单元格中的计时器完成时更新核心数据的问题做出了贡献,这是这个问题的延续。你有解决这个问题的知识,所以我问你:你需要给对象添加一个进程信息吗?如果是,这是如何完成的?最后,如果我无法在单元格内保存对这个唯一进程信息的任何类型的引用,我可以在哪里以及如何保存它,以便它知道在更新核心数据模型时要检索什么? 看起来@frank21 正在持久化 URI 表示,这是(相对)安全的。 【参考方案1】:

要从 URI 表示中获取 NSManagedObjectID,您必须在 NSManagedObjectContextNSPersistentStoreCoordinator - managedObjectIDForURIRepresentation: 上调用适当的方法。

URI 表示包括用于持久化对象的存储的 UUID。调用managedObjectIDForURIRepresentation: 将导致Core Data 尝试根据该信息找到正确的存储,然后使用URI 的其余部分来定位该特定对象。因此,请确保每次启动时商店的 UUID 都不会更改。如果 Core Data 找不到与 URI 表示 managedObjectIDForURIRepresentation: 关联的数据,将返回 nil。

因此,例如,您会执行以下操作:

NSManagedObjectID objectId = [[managedObjectContext persistentStoreCoordinator] managedObjectIDForURIRepresentation:uri];

或者快速:

let objectId:NSManagedObjectID = persistentStoreCoordinator.managedObjectIDForURIRepresentation(uri)

【讨论】:

以上是关于使用 NSURL 检索托管对象 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 NSURL 检索本地文件?

从 Git 中检索核心数据托管对象模型

尝试使用 Photos Framework [Swift 2.0] 从 imagepickercontroller 检索 NSURL

有没有比获取请求更快的方法来检索 Core Data 中的特定托管对象?

从 NSURL 检索文件名

iOS 检索 Web 响应数据后如何从 JSON 中检索值