I Kerndaten sind mit und habe die App manchmal Absturz nach der Rückkehr aus dem Hintergrund gefunden. Ich habe den Absturz innerhalb eines Blockmethoden-Bodys erkannt, als ich auf eine Eigenschaft in einer Unterklasse zugreifen wollte.eine Kerndatum NSManagedObject Zugriff, nachdem sie von der Wiederaufnahme Hintergrund stürzt die App
Ich habe eine Eigenschaft, die einen Verweis auf eine NSManagedObject
Unterklasse hält.
@Eigenschaft (nichtatomisch, stark) CalItem * calObject;
den Absturz reproduzieren ich das Kind Viewcontroller zuerst anrufen müssen (NoteViewController
), die einen Block (NoteTextBlock
).
NoteViewController *noteViewController = [[NoteViewController alloc]initWithNote:self.calObject.note NoteTextBlock:^(NSString *noteText) {
self.calObject.note = noteText; //crashing here
}];
Dann senden Sie die App zum Hintergrund und fortsetzen Sie es. Danach im NoteViewController ich werde eine Nachricht an den aufrufenden ViewController zurückgeben.
if (self.noteTextBlock)
{
self.noteTextBlock(trimmedString);
}
Wenn der Block zurückkehrt und die Linie self.calObject.note = noteText
die Abstürze App ausgeführt wird.
So anscheinend können Sie keinen Block auf den Stapel gelegt, ganz und die App wieder aufnehmen und dann mit fortführen, was im Inneren des Blocks definiert wurde? Oder mache ich hier gerade etwas falsch?
Edit:
*** 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>''
Der Block wie diese im Inneren des Kindes definiert ist Viewcontroller:
@property(nonatomic, copy)NoteTextBlock noteTextBlock;
EDIT2
Dies ist, was ich bekomme, wenn ich einen Haltepunkt setzen auf die Linie, wo es abstürzt.
(lldb) po self.calObject
$2 = 0x0b4464d0 <DTODay: 0xb4464d0> (entity: DTODay; id: 0xb489d00 <x-coredata://C2304B7C-7D51-4453-9993-D33B9113A7A5/DTODay/p57> ; data: <fault>)
Ich bin mit dem MagicalRecord lib die Core Data alle Sachen zu verwalten.
- (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];
}
Könnten Sie die Crash-Meldung zur Verfügung stellen? –
Was ist der managedObjectContext des calObject vor dem Absturz? Ist es Null? –
Das Problem tritt nur auf, wenn die App während der Verwendung eines Blocks als Rückruf beendet wird. In anderen Situationen kann ich calObject problemlos und ohne Probleme weiter verwenden. Könnte es möglich sein, dass der Block oder das "Selbst" innerhalb des Blocks irgendwie nicht richtig beibehalten wird? – Oysio