2015-01-15 65 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)