2014-09-04 81 views
0

我有一個類,在其中我將某個實體的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在所有這些之後仍然存在於內存中。

+0

這種情況發生在對象被刪除或從上下文或存儲中刪除但仍保留對其的引用時 – quellish 2014-09-06 23:17:32

+0

它應該不會被刪除,在那裏沒有像deleteObject那樣的東西,再加上爲什麼它在didAppear和willAppear之間被刪除是神祕的。 – 2014-09-08 15:09:28

回答

0

這些生命週期方法中沒有任何其他事情會發生,這會影響此實體_userPerformanceRecord。

也許,但是您的託管對象可能發生了其他事情。我會建議也記錄對象本身(被管理對象上下文可能nil因爲對象是nil

它也可能有些事情要和你建立了伊娃的方式,嘗試訪問self.object而非_object。請顯示伊娃聲明並指明您指定對象的位置。首選位置是prepareForSegue

+0

它的不是基於故事板的項目,它具有簡單的導航控制器,我使用pushViewController作爲相同的自定義init方法,將函數中的變量(它是一箇舊項目,自iOS 5以來掛起)傳遞給它。我檢查了_userPerformanceRecord,它不是零,它存在於內存中。另外,當我擁有對象的內存時,如何通過_object或self.object訪問屬性的方式會有所不同,但管理的對象上下文不存在。我將使用蘋果的技術支持,幾乎嘗試了一切。 – 2014-09-06 00:10:54