2015-02-16 2 views
0

Как создать автономный экземпляр Core Data NSManagedObject - понять не удалосьКак создать автономный экземпляр Core Data NSManagedObject - не удалось

У меня есть класс

class Location: NSManagedObject { 
.... 
} 

let managedLocation = NSEntityDescription.insertNewObjectForEntityForName(
    "Location", inManagedObjectContext: managedObjectContext 
) as Location 

let standaloneLocation = Location() // didn't work 

последнее выражение бросает исключение

CoreData: error: Failed to call designated initializer on NSManagedObject class 'AppName.Location'

Я понимаю, почему - но есть ли способ создать временный экземпляр, который не будет сохранен?

+0

Возможный дубликат [Могу ли я создавать экземпляры объекта NSManagedObject в определенном NSManagedObjectContext?] (Http://stackoverflow.com/questions/7244230/can-i-make-instances-of-an-nsmanagedobject-in-no -particular-nsmanagedobjectconte) – Brian

ответ

2

Вы можете передать nil как управляемый объект контекста:

let standaloneLocation = NSEntityDescription.insertNewObjectForEntityForName(
    "Location", inManagedObjectContext: nil 
) as Location 

Обратите внимание, что это создает экземпляр для Вас, который не вставлен в контекст; Вы все еще не будет писать код, как:

let standaloneLocation = Location()

+0

Это может привести к неопределенному поведению. – quellish

1

Самый простой способ сделать то, что вы просите, чтобы создать новый контекст ребенка для этого объекта.

  • Создать новый контекст ребенка с соответствующим NSManagedObjectContextConcurrencyType
  • Установить родительский контекст ребенка.
  • Создайте свой новый экземпляр управляемого объекта с контекстом ребенка:

    пусть managedLocation = NSEntityDescription.insertNewObjectForEntityForName ( "Location", inManagedObjectContext: childContext ), как Адрес

  • делать все, что вы хотите сделать с этот объект. Если вы не хотите сливать его в родительский контекст, просто удалите его.

Managed object contexts are intended to be "scratchpads". Представляют транзакции или смены, и являются легкими. Если изменения, которые были внесены в контекст или управляемые объекты, которыми он владеет, не нужны, отмените их.

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

Смежные вопросы