2013-06-05 48 views
1

我想向我的iOS應用添加URL方案,但是URL需要能夠從Core Data指向某個NSManagedObject。我很高興我的應用必須生成供用戶使用的URL,但在URL中使用整個網址只是不恰當。具有核心數據管理對象(iOS)的URL方案

當我取回被管理對象的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 

有更多的我能做到縮短這個? 怎麼樣有部分633EAF37-A03D-4954-976D-B3B0C32F8033?這是否與安裝應用程序的每個設備相同?還是唯一的? 如果它在設備上是一樣的,那麼我只需要使用最後的p7作爲我可以添加回字符串的其他東西。

任何意見讚賞。

感謝

+0

剛剛基於某個ID獲取託管對象怎麼樣? –

+0

唯一的當前uniqueID是NSManagedObject objectID。我沒有添加我自己的唯一ID,並且該應用已經發布。 – Darren

回答

4

也許看看Permanent NSManagedObjectID not so permanent?首先是關於傳遞NSManagedObjectID周圍的脆弱性。 Marcus S. Zarra聲稱objectID可以在對象的生命期間更改

話雖這麼說,該URI爲永久管理對象ID似乎總是要建這樣的:

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

其中

  • <UUID>metadata字典的NSStoreUUIDKeyNSPersistentStore,
  • <EntityName>是實體名稱:-)
  • <Key>是SQLite在內部用於表的主鍵(但對Core Data API不可見 )。

但請注意,這只是我觀察到的。格式沒有記錄,並且可能隨時更改 。

<UUID>是在創建存儲文件時生成的,因此它在安裝應用程序的每個設備上都不相同。

所以如果上述分析是正確的和URI方案不會改變未來, 那麼你確實可以從最後一個組件單獨p<Key> 重建管理對象URI。

0

這感覺就像暴露你的實現太多。我強烈建議您在實體中維護您自己的唯一id屬性,並在獲取URL查找時使用它從CoreData中獲取正確的實體。

這個未來證明你應該永遠說,開始同步到基於Web的版本的應用程序或其他非CoreData的數據存儲。

+0

我同意,但由於數據已經存在,我不太有信心改變已添加的內容以添加單獨的唯一參考。 – Darren