如何传递 Core Data objectID 并将其与 Continuity 一起使用

Posted

技术标签:

【中文标题】如何传递 Core Data objectID 并将其与 Continuity 一起使用【英文标题】:How to pass Core Data objectID and use it with Continuity 【发布时间】:2015-01-31 03:40:14 【问题描述】:

只是尝试使用 Continuity 更新一些 Core Data 应用程序,但在使用 userInfo 字典中的选定对象 ID 在后续设备上显示正确数据时遇到了一些问题。

我的第一个想法是使用 ObjectID,但是在接收设备上,这永远不会在 Core Data 存储中找到相应的对象。

事实证明,objectID 的 URL 表示包含商店本身的 UUID,并且由于两个商店的 UUID 不同,这显然会失败。

所以我想我可以用持续的设备 UUID 替换 URL 中核心数据存储的 UUID 并使用它,毫无疑问它会起作用。

Url 似乎是以下格式

有谁知道在两个具有通过 iCloud 同步的核心数据存储的设备之间传递对对象的引用的正确方法是什么?

【问题讨论】:

【参考方案1】:

这个我自己来回答,看看有没有更好的答案……

我使用 Continuity API 传递 objectID(来自 objectID.URIRepresentation)的 url,并在接收设备上使用以下内容创建一个新 URL:

urlNSUserActivity.userInfo字典中传入的url

let storeUUID = self.identifierForStore()

// Switch the host component to be the local storeUUID
let newURL = NSURL(scheme: url.scheme!, host: storeUUID, path: url.path!)


func identifierForStore()->NSString? 
    if let store = self.persistentStoreCoordinator?.persistentStores[0] as? NSPersistentStore           
        return store.identifier
     else 
        return nil
    

这似乎工作得很好 - 希望它可以帮助某人

【讨论】:

这似乎可行,但不能保证对象标识符在两个持久存储之间匹配。一个设备可能有 p1 作为标识符,而另一个设备可能有完全不同的东西 p4、p2、p3 等。

以上是关于如何传递 Core Data objectID 并将其与 Continuity 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

在 Core Data 中获取多个 objectID?

既然 objectID 在临时对象和永久对象之间发生变化,如何有效地处理 Core Data 中的临时对象?

如何在Core Data中使用带有fetchRequest的谓词

SWIFTUI Core Data 传递数字

在基于导航的应用程序中使用 Core Data 时,我如何(应该?)在 UITableViews 之间传递上下文?

在 iOS 中传递上下文以将 Core Data 与 Storyboard 一起使用