2016-08-08 53 views
12

Einige Benutzer von mir haben beim Speichern einen CoreData-Fehler. Ich konnte online keine Informationen über diesen Fehler finden oder wie man den Stack-Trace symbolisiert.CoreData ManagedObjectContext Rekursiver Speicherfehler

Die Fehlermeldung ist attempt to recursively call -save: on the context aborted, stack trace, mit der vollständigen Fehlermeldung unten.

Hat jemand irgendwelche Hinweise oder Ideen, um herauszufinden, was schief läuft?

Error Domain=NSCocoaErrorDomain Code=132001 "(null)" UserInfo={message=attempt to recursively call -save: on the context aborted, stack trace=(
0 CoreData       0x0000000188cbe70c + 164 
1 Primetime       0x0000000100077ea4 Primetime + 130724 
2 Primetime       0x00000001000ae988 Primetime + 354696 
3 Primetime       0x0000000100081674 Primetime + 169588 
4 Primetime       0x00000001000802ac Primetime + 164524 
5 CoreData       0x0000000188d8bbd4 + 4568 
6 CoreData       0x0000000188d8a9ec + 124 
7 CoreFoundation      0x00000001869ac24c + 20 
8 CoreFoundation      0x00000001869ab950 + 400 
9 CoreFoundation      0x00000001869ab6cc + 60 
10 CoreFoundation      0x0000000186a187bc + 1504 
11 CoreFoundation      0x00000001868ef32c _CFXNotificationPost + 376 
12 Foundation       0x000000018738296c + 68 
13 CoreData       0x0000000188cc16e8 + 724 
14 CoreData       0x0000000188d43ca4 + 1336 
15 CoreData       0x0000000188cbfd04 + 2116 
16 CoreData       0x0000000188cbe808 + 416 
17 Primetime       0x0000000100077ea4 Primetime + 130724 
18 Primetime       0x0000000100089968 Primetime + 203112 
19 Primetime       0x00000001001d47c0 Primetime + 1558464 
20 libdispatch.dylib     0x0000000186459058 + 24 
21 libdispatch.dylib     0x0000000186459018 + 16 
22 libdispatch.dylib     0x000000018645dbcc _dispatch_main_queue_callback_4CF + 1000 
23 CoreFoundation      0x00000001869bfc48 + 12 
24 CoreFoundation      0x00000001869bd834 + 1660 
25 CoreFoundation      0x00000001868ed764 CFRunLoopRunSpecific + 292 
26 GraphicsServices     0x00000001882f0198 GSEventRunModal + 180 
27 UIKit        0x000000018c8668d0 + 664 
28 UIKit        0x000000018c86163c UIApplicationMain + 208 
29 Primetime       0x00000001000ada1c Primetime + 350748 
30 libdyld.dylib      0x00000001864905b8 + 4 
+2

Jede Chance, dass Sie 'save:' aus Code aufrufen, der ausgeführt wird, wenn 'NSManagedObjectContextDidSaveNotification' gepostet wird? –

+1

Ich verwende diese Benachrichtigung nicht, obwohl ich 'NSManagedObjectContextObjectsDidChange' verwende. Ich habe gerade die Dokumentation für 'NSManagedObjectContextObjectsDidChange' überprüft und es heißt, es ist noch nicht sicher,' save' aufzurufen. Ich habe einige Stellen in meinem Code gefunden, wo eine Sicherung von 'NSManagedObjectContextObjectsDidChange' ausgelöst werden konnte. Ich werde mich weiter einarbeiten, danke für den Tipp. – duncanc4

+0

Ich bekomme das nur in iOS10 Beta 4 nicht in iOS 9.3.3 und bin nicht in der Lage, eine Lösung zu finden. Haben Ihre Benutzer ein Upgrade? – Grenter

Antwort

17

Ich hatte das gleiche Problem mit dem Xcode8/ios10. Das Problem wurde durch einen Aufruf zum Speichern von Stammdatenkontext in der folgenden Methode verursacht.

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { 
    [self methodCallingSaveContext]; 
} 

Die

methodCallingSaveContext 

ruft die Kerndatenkontext speichern. Um den rekursiven Aufruf zu brechen schrieb ich die Methode in der folgenden Art und Weise:

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller { 
     dispatch_async(dispatch_get_main_queue(), ^{ 
       [self methodCallingSaveContext]; 
     }); 
} 

nun wieder alles funktioniert.