我有一個類,在其中我將某個實體的PluginNewObject插入到託管對象上下文中。託管對象上下文直接從應用程序的代理中檢索,並且也是「強壯」的屬性。丟失其託管對象上下文的對象
這裏是我如何parentViewController創建實體
_userPerformanceRecord = [NSEntityDescription insertNewObjectForEntityForName:@"KRUserPerformance" inManagedObjectContext:[_gAppData managedObjectContext]];
現在根據我的任務,我有這個對象傳遞給一個新的視圖控制器,在那裏我會做一些改變成其值,然後最後保存到數據庫。
現在這裏是視圖的生命週期方法中發生的事情。
init method
NSLog(@"init : Object context for record %@", _userPerformanceRecord.managedObjectContext);
viewDidLoad
NSLog(@"load : Object context for record %@", _userPerformanceRecord.managedObjectContext);
viewWillAppear
NSLog(@"will appear : Object context for record %@", _userPerformanceRecord.managedObjectContext);
viewDidAppear
NSLog(@"appear : Object context for record %@", _userPerformanceRecord.managedObjectContext);
NSLog(@"Default Managed Object Context: %@",[_gAppData managedObjectContext]);
這些生命週期方法中沒有任何其他事情會影響到這個實體_userPerformanceRecord。
輸出是如下
2014-09-04 13:46:01.957 myApp[5404:60b] init : Object context for record <NSManagedObjectContext: 0x15670eb0>
2014-09-04 13:46:01.958 myApp[5404:60b] <NSManagedObjectContext: 0x15670eb0>
2014-09-04 13:46:02.037 myApp[5404:60b] check perf : Object context for record <NSManagedObjectContext: 0x15670eb0>
2014-09-04 13:46:02.047 myApp[5404:60b] load : Object context for record <NSManagedObjectContext: 0x15670eb0>
2014-09-04 13:46:02.048 myApp[5404:60b] will appear : Object context for record <NSManagedObjectContext: 0x15670eb0>
2014-09-04 13:46:02.764 myApp[5404:60b] appear : Object context for record (null)
2014-09-04 13:46:02.764 myApp[5404:60b] Default Managed Object Context: <NSManagedObjectContext: 0x15670eb0>
所以,如果你觀察輸出現在,你會發現,實體mananagedObjectContext存在,直到viewWillAppear中,但在viewDidAppear _userPerformanceRecord正在失去其managedObjectContext,但如果我從應用程序的原始managedObjectContext它仍然存在於內存中,只是managedObjectContext與實體的關聯正在迷失。我不知道如何通過視圖的生命週期方法,對象managedObjectContext可能會丟失。只需補充一點,_userPerformanceRecord在所有這些之後仍然存在於內存中。
這種情況發生在對象被刪除或從上下文或存儲中刪除但仍保留對其的引用時 – quellish 2014-09-06 23:17:32
它應該不會被刪除,在那裏沒有像deleteObject那樣的東西,再加上爲什麼它在didAppear和willAppear之間被刪除是神祕的。 – 2014-09-08 15:09:28