2017-02-15 22 views
0

我想初始化一個對象並填充它,但不會將其添加到持久性存儲中。我想要一個表單上的用戶,並將數據添加到managedobject的字段,但只有當用戶按下保存按鈕時才保存它。核心數據 - 如何初始化一個對象但不將其添加到持久存儲中?

我使用AERecord coreData包裝如果是相關

+2

當您在managedObjectContext中創建對象時,請不要在您的managedObjectContext上調用save?在你的情況下,**不要調用** AERecord.save() – 2017-02-15 14:27:42

回答

1

如果用戶取消,就這樣從被管理對象上下文刪除對象:

[object deleteInContext:managedObjectContext];

請參閱link

0

只是不要告訴它創建它時使用什麼上下文。例如,指定的初始化程序是init(entity:insertInto:),但第二個參數是可選的。通過零。稍後,您可以使用insert(_:)方法將其添加到託管對象上下文中。

+0

https://developer.apple.com/reference/coredata/nsmanagedobject/1506357-init - 如果上下文不爲零,則此方法調用[上下文insertObject :self](這會導致awakeFromInsert()被調用)。換句話說,按照您的建議進行操作將不會調用awakeFromInsert,並且OP必須手動設置默認值。此外,如果他有關係,這些關係將不會建立。但是,避免調用保存NSManagedObjectContext,不會保存並按照他的要求將對象推送到PersistentStore,但仍然給他一個有效的對象來處理而不會出現複雜問題 – 2017-02-15 16:20:16

+0

而且,您的方法會將對象插入上下文中,可能會建立在知道該對象實際上是需要之前的關係。它還需要額外的步驟來刪除不需要的對象 - 否則他不能再次保存上下文以避免保存不需要的對象。兩種方法都有複雜性。 –

+0

讓我們不要過分複雜的事情,這是一個**簡單的刪除**,僅此而已。 CoreData將在百萬分之一秒的時間內爲您處理所有關係和其他事務。如果我必須選擇避免調用awakeFromInsert(),而不是獲取NSManagedObject和所有其他機構的所有默認值,甚至不會將它插入到NSManagedObjectContext中(這是大量的步驟和複雜性),相比於簡單地調用一個基本的deleteObject,當IF取消時,我會選擇後者。但我想你的答案是一個有效的選擇。 – 2017-02-15 16:37:01

相關問題