2010-06-27 78 views
2

我正在使用nsfetchedresultscontroller從coredata的數據使用tableview。當視圖加載我做一個新的實體使用tableview coredata臨時對象

SomeManagedObject *someManagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"SomeManagedObject" inManagedObjectContext:self.managedObjectContext]; 

這樣新的實體出現在我的tableview。現在我希望這個實體只是臨時的,但是當我在tableview中編輯一些對象並保存managedObjectContext時,臨時實體也會被保存,而我不想那樣做。

是他們只保存一個對象的方法,而不是de managedObjectContext中的所有東西?

是他們的一些其他方式來爲我的tableview做一個臨時對象。

任何幫助將是非常受歡迎的。 謝謝 噸

+0

您可以將一個無上下文傳遞給initWithEntity:insertIntoManagedObjectContext。看到這個問題:http://stackoverflow.com/questions/3256195/how-to-deal-with-temporary-nsmanagedobject-instances – Symmetric 2012-09-26 02:27:52

回答

0

不,在managedObjectContext保存是一個全部或沒有。我不知道的是,如果你設置了管理對象的持久性存儲零

- (void)assignObject:(id)object toPersistentStore:(NSPersistentStore *)store 

如果然後保存managedObjectContext這個對象不應該保存會發生什麼。這只是一個猜測,但告訴我它是否有效;-)

+0

沒有。這是行不通的。我想它會在使用nil時將對象分配給默認存儲。 – Ton 2010-06-27 22:11:28

0

對於臨時管理對象,使用第二個管理對象上下文(MOC)創建它們。完成後,只需釋放MOC而不執行保存。

看看CoreDataBooks中的添加書本代碼,它使用相同的方法在用戶取消時丟棄新添加的對象。

+0

不要創建單獨的上下文。這是非常浪費和昂貴的。如果對象必須是臨時的,則使用-init創建它,並且不要傳入任何上下文。 – 2010-08-07 23:49:58

+0

同意Marcus,這是我的做法,我使用基類來處理遞歸插入到有效的上下文中... http://www.locassa.com/index.php/2011/05/temporary- storage-in-apples-coredata/ – 2011-05-22 22:49:42

+0

@ MarcusS.Zarra,你還不建議爲臨時(可能被拋棄)的對象創建一個單獨的上下文嗎?它在2014年仍然有效嗎?提前致謝。 – 2014-03-24 15:50:35

2

創建新的NSManagedObject與它的alloc init並傳遞nil而不是NSManagedObjectContext。然後,如果您稍後決定要將該對象設爲永久性,請將其設置爲上下文。但是,這不會讓你在NSFetchedResultsController中看到它,因爲它不會與上下文關聯。

如果您能解釋您的最終目標是什麼,那麼可以提供更好的答案。

+0

這將在@dynamic屬性上失敗。 initWithEntity的文檔:insertIntoManagedObjectContext說:「重要說明:此方法是NSManagedObject的指定初始化程序,您不能簡單地通過發送init來初始化管理對象。」 – Symmetric 2012-09-26 02:29:23

+0

您的評論沒有意義。我的答案特定狀態傳遞給NSManagedObjectContext nil。沒有暗示''-init'將被調用。 – 2012-09-26 06:12:52

+0

好的,對不起。我讀了上面的「alloc init」作爲一個簡單的init,而不是initWithEntity。在任何情況下,你對這個問題的答案使得它更加清晰,謝謝:http://stackoverflow.com/questions/3256195/how-to-deal-with-temporary-nsmanagedobject-instances – Symmetric 2012-09-26 16:11:25