1

我想将 URL 方案添加到我的 iOS 应用程序,但是 URL 需要能够指向某个NSManagedObject来自Core Data. NSManagedObject我很高兴我的应用程序必须生成供用户使用的 URL,但在 URL 中使用整个 URI似乎并不正确。

当我检索托管对象的 URI 时,它是这样的:

x-coredata://633EAF37-A03D-4954-976D-B3B0C32F8033/MyObject/p7

我猜我可以放弃x-coredata://我可以放回我的application:openURL方法的部分,但这仍然给我留下这样的 URL:

myurlscheme://event_to_perform?object=633EAF37-A03D-4954-976D-B3B0C32F8033/MyObject/p7

我还能做些什么来缩短它吗?has 部分633EAF37-A03D-4954-976D-B3B0C32F8033呢?这在安装应用程序的每台设备上都是一样的,还是独一无二的?如果跨设备相同,那么我只需要使用 finalp7作为我可以添加回字符串的所有其他内容。

任何建议表示赞赏。

谢谢

4

2 回答 2

4

也许看看永久 NSManagedObjectID 不是那么永久?首先是关于传递的脆弱性NSManagedObjectID。Marcus S. Zarra 声称,在一个物体的生命周期中,它objectID 会发生变化。

话虽如此,永久托管对象 ID 的 URI 似乎总是这样构建:

x-coredata://<UUID>/<EntityName>/p<Key>

在哪里

  • <UUID>是的字典的NSStoreUUIDKey值,metadataNSPersistentStore
  • <EntityName>是实体名称:-)
  • <Key>是 SQLite 在内部用于表的主键(但对 Core Data API 不可见)。

但请注意,这只是我观察到的。格式没有记录,可能随时更改。

<UUID>是在创建商店文件时生成的,因此在安装应用程序的每台设备上都不相同。

所以如果上面的分析是正确的并且URI方案在未来没有改变,那么你确实可以仅从最终组件重构托管对象URI p<Key>

于 2013-06-05T11:53:48.680 回答
0

这感觉就像暴露你的实现太多了。我强烈建议您在实体中维护自己的唯一 id 属性,并在获取 URL 查找时使用它从 CoreData 获取正确的实体。

这个未来证明你应该开始同步到你的应用程序的基于 Web 的版本或其他一些不是 CoreData 的数据存储。

于 2013-06-05T12:45:57.443 回答