2015-01-15 49 views
0

我試圖從保存在我的用戶默認值中的NSURL檢索並創建託管對象,但我無法弄清楚如何使用managedObjectIDForURIRepresentation函數。我的代碼看起來像這樣:使用NSURL檢索托管對象ID

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? 

} 

任何意見,將不勝感激。

+0

在用戶默認存放的objectID可能是一個壞主意,因爲它不能保證在應用程序啓動時保持穩定。比較http://stackoverflow.com/questions/12218396/permanent-nsmanagedobjectid-not-so-permanent。 – 2015-01-15 19:01:47

+0

@MartinR您今天早些時候對我在自定義單元中的定時器完成時更新核心數據的問題做出了貢獻,這是此問題的延續。你有解決這個問題的知識,所以我問你:你需要爲對象添加一個流程信息嗎?如果是的話,這是如何完成的?最後,如果我無法在單元格內保存任何類型的對此唯一過程信息的引用,那麼在何處以及如何保存它以便在更新核心數據模型時知道要檢索的內容? – martin 2015-01-15 19:34:05

+1

它看起來像@ frank21是持久的URI表示,這是(相對)安全。 – quellish 2015-01-16 07:41:55

回答

4

要從URI表示獲得NSManagedObjectID,必須呼籲NSManagedObjectContextNSPersistentStoreCoordinator適當的方法 - managedObjectIDForURIRepresentation:

URI表示形式包括用於保存對象的商店的UUID。調用managedObjectIDForURIRepresentation:將導致核心數據嘗試根據該信息找到正確的存儲,然後使用其餘的URI來查找該特定對象。因此,請確保您的商店的UUID在每次啓動時都不會發生變化。如果核心數據找不到與URI表示managedObjectIDForURIRepresentation:相關的數據將返回零。

所以,舉例來說,你可以這樣做:

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

還是在迅速:

let objectId:NSManagedObjectID = persistentStoreCoordinator.managedObjectIDForURIRepresentation(uri)