2016-08-08 20 views
12

Niektórzy użytkownicy podczas próby wykonania zapisu napotykają błąd CoreData. Nie byłem w stanie znaleźć żadnych informacji online na temat tego błędu lub jak oznaczyć ślad stosu. Komunikat o błędzie: attempt to recursively call -save: on the context aborted, stack trace.CoreData ManagedObjectContext Błąd zapisu rekurencyjnego

Czy ktoś ma jakieś podpowiedzi i pomysły, jak dowiedzieć się, co dzieje się nie tak?

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

Czy istnieje jakaś szansa, że ​​wywołasz 'save:' z kodu, który działa, gdy 'NSManagedObjectContextDidSaveNotification' został opublikowany? –

+1

Nie używam tego powiadomienia, chociaż używam 'NSManagedObjectContextObjectsDidChange'. Właśnie sprawdziłem dokumentację dla 'NSManagedObjectContextObjectsDidChange' i powiedziałem, że nie jest bezpiecznie wywoływać' save' jeszcze. Znalazłem kilka miejsc w moim kodzie, w których może zostać wywołany zapis z 'NSManagedObjectContextObjectsDidChange'. Nadal będę się do niego zagłębiał, dzięki za napiwek. – duncanc4

+0

Dostaję tylko to w iOS10 beta 4 nie dzieje się w iOS 9.3.3 i nie mogę znaleźć rozwiązania. Czy twoi użytkownicy są uaktualnieni? – Grenter

Odpowiedz

17

Miałem ten sam problem z Xcode8/ios10. Problem był spowodowany wywołaniem zapisu kontekstu danych podstawowych w poniższej metodzie.

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

The

methodCallingSaveContext 

nazywa zapisać podstawowy kontekst danych. W celu przerwania połączenia przepisałem rekurencyjną metodę w następujący sposób:

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

Teraz wszystko działa ponownie.

Powiązane problemy