0

Я пытаюсь получить и создать управляемый объект из NSURL, сохраненный в моих настройках по умолчанию, но я не могу понять, как использовать функцию managedObjectIDForURIRepresentation. Мой код выглядит так:Получение идентификатора управляемых объектов с помощью NSURL

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. –

+0

@MartinR Сегодня вы внесли свой вклад в мой вопрос об обновлении основных данных, когда таймер в моей пользовательской ячейке выполнен, и это продолжение этого вопроса. У вас есть знания для решения этой проблемы, поэтому я спрашиваю вас: вам нужно добавить информацию о процессе в объект? Если да, как это делается? И, наконец, если я не могу сохранить какой-либо тип ссылки на эту уникальную информацию процесса внутри ячейки, где и как ее сохранить, чтобы он знал, что нужно получить при обновлении базовой модели данных? – martin

+1

Похоже, что @ frank21 сохраняет представление URI, которое (относительно) безопасно. – quellish

ответ

4

Для получения NSManagedObjectID из представления URI, необходимо вызвать соответствующий метод на NSManagedObjectContext или NSPersistentStoreCoordinator - managedObjectIDForURIRepresentation:.

В представлении URI используется UUID хранилища, используемого для сохранения объекта. Вызов managedObjectIDForURIRepresentation: заставит Core Data попытаться найти правильный магазин на основе этой информации, а затем использовать остальную часть URI для поиска этого конкретного объекта. Из-за этого убедитесь, что UUID вашего магазина не меняется при каждом запуске. Если Core Data не может найти данные, связанные с представлением URI, то managedObjectIDForURIRepresentation: вернет нуль.

Так, например, вы могли бы сделать что-то вроде:

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

Или стрижа:

let objectId:NSManagedObjectID = persistentStoreCoordinator.managedObjectIDForURIRepresentation(uri)