2017-02-15 8 views
0

Я хотел бы инициализировать объект и заполнить его, но не добавить его в постоянное хранилище. Я хотел бы иметь пользователя в форме и добавлять данные в поля управляемого объекта, но только сохранить его, как только пользователь нажмет кнопку сохранения.Основные данные. Как инициализировать объект, но не добавлять его в постоянный магазин?

Я использую обертку AERecord CoreData если она имеет отношение

+2

Просто не вызывайте сохранение в управляемом объектеObjectContext при создании объекта в файле managedObjectContext? В вашем случае ** не вызывайте ** AERecord.save() –

ответ

1

Если пользователь отменяет, просто удалить объект из контекста управляемого объекта, как это:

[object deleteInContext:managedObjectContext];

Пожалуйста, обратитесь link

0

Просто не говорите, какой контекст использовать, когда вы его создаете. Например, назначенный инициализатор равен init(entity:insertInto:), но второй аргумент является необязательным. Пропустите ноль. Позже вы можете добавить его в контекст управляемого объекта, используя метод insert(_:).

+0

https://developer.apple.com/reference/coredata/nsmanagedobject/1506357-init - Если контекст не равен нулю, этот метод вызывает [context insertObject : self] (который вызывает awakeFromInsert() для вызова). Другими словами, делать то, что вы предложили, не будет вызывать awakeFromInsert, и OP должны установить значения по умолчанию вручную. Также, если у него есть отношения, эти отношения не будут установлены. Однако, избегая вызова save в NSManagedObjectContext, не будет сохранять и выталкивать объект в PersistentStore по его запросу, но все же предоставить ему действительный объект для работы без осложнений. –

+0

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

+0

Давайте не будем перегружать вещи, это простое удаление **, не более того. CoreData позаботится обо всех отношениях и всего остального для вас в миллионной доли секунды. Если бы мне пришлось выбирать между тем, чтобы избегать вызова awakeFromInsert(), и не получать все значения по умолчанию в NSManagedObject и всех других установках и даже ** не вставлять его в NSManagedObjectContext еще ** (что является массовым шагом и сложностями) по сравнению с просто вызовом basic deleteObject, когда и IF отменены, я бы выбрал последний. Но я думаю, что ваш ответ является допустимым вариантом. –