我正在使用核心數據,並發現應用程序有時從後臺恢復後崩潰。當我嘗試訪問NSManagedObject
子類的屬性時,我發現塊方法體內發生了崩潰。從後臺恢復後訪問核心數據NSManagedObject崩潰應用程序
我有一個財產,持有對NSManagedObject
子類的引用。
@property(nonatomic,strong)CalItem * calObject;
要重現崩潰我先需要致電孩子的viewController(NoteViewController
)傳遞一個塊(NoteTextBlock
)。
NoteViewController *noteViewController = [[NoteViewController alloc]initWithNote:self.calObject.note NoteTextBlock:^(NSString *noteText) {
self.calObject.note = noteText; //crashing here
}];
然後發送應用程序到背景並恢復它。 之後在NoteViewController中,我會向調用viewController返回一條消息。
if (self.noteTextBlock)
{
self.noteTextBlock(trimmedString);
}
當塊返回和線self.calObject.note = noteText
被執行的應用程序崩潰。
因此,顯然你不能把一個塊放在堆棧上,然後恢復應用程序,然後繼續塊內定義的內容?或者我在這裏做錯了什麼?
編輯:
*** Terminating app due to uncaught exception 'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0xb253100 <x-coredata://C2304B7C-7D51-4453-9993-D33B9113A7A5/DTODay/p57>''
塊定義這樣子內的viewController:
@property(nonatomic, copy)NoteTextBlock noteTextBlock;
EDIT2
這是我所得到的,當我設置一個斷點上它崩潰的路線。
(lldb) po self.calObject
$2 = 0x0b4464d0 <DTODay: 0xb4464d0> (entity: DTODay; id: 0xb489d00 <x-coredata://C2304B7C-7D51-4453-9993-D33B9113A7A5/DTODay/p57> ; data: <fault>)
我使用MagicalRecord LIB來管理所有的核心數據的東西。
- (void)applicationDidBecomeActive:(UIApplication *)application
{
if ([NSManagedObjectContext MR_defaultContext] == nil
|| [NSManagedObjectModel MR_defaultManagedObjectModel] == nil
|| [NSPersistentStoreCoordinator MR_defaultStoreCoordinator] == nil
|| [NSPersistentStore MR_defaultPersistentStore] == nil
)
{
//coming back from background, re-init coredata stack
[MagicalRecordHelpers setupCoreDataStackWithAutoMigratingSqliteStoreNamed:DBNAME];
}
你能提供碰撞信息的問題? – 2013-04-05 11:59:32
崩潰前calObject的managedObjectContext是什麼?它是零嗎? – 2013-04-05 12:05:12
只有當應用程序退出並在使用塊作爲回調中恢復時,問題纔會發生。在其他情況下,我可以完全恢復並繼續使用calObject,而不會出現任何問題。不知怎的,塊中的塊或「自我」不能正確保留? – Oysio 2013-04-05 12:11:51