2016-08-08 15 views
12

保存を実行すると、私の一部のユーザーがCoreDataエラーに遭遇しています。私は、このエラーやスタックトレースをどのように記号化するかについて、オンライン上の情報を見つけることができませんでした。CoreData ManagedObjectContext再帰的保存エラー

エラーメッセージはattempt to recursively call -save: on the context aborted, stack traceで、完全なエラーメッセージは以下のとおりです。

Doeの誰かが、何がうまくいかないのか把握するためのヒントやアイデアはありますか?

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

「NSManagedObjectContextDidSaveNotification」がポストされたときに実行されるコードから 'save:'を呼び出す可能性はありますか? –

+1

私は 'NSManagedObjectContextObjectsDidChange'を使用していますが、私はその通知を使用していません。私は 'NSManagedObjectContextObjectsDidChange'のドキュメントをチェックしましたが、まだ' save'を呼び出すのは安全ではないと言います。 NSManagedObjectContextObjectsDidChangeから保存がトリガされるコードで、いくつかの箇所が見つかりました。私はそれを掘り下げ、チップのおかげで引き続きします。 – duncanc4

+0

iOS 9ベータ4でこれを取得しているのは、iOS 9.3.3では発生しておらず、解決策を見つけることができません。あなたのユーザーはアップグレードされましたか? – Grenter

答えて

17

私はXcode8/ios10でも同じ問題がありました。この問題は、以下のメソッドの中にコアデータコンテキストを保存する呼び出しが原因でした。セーブコアデータコンテキストを呼び出し

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

methodCallingSaveContext 
。 は、再帰呼び出しを破るために、私は次のようにメソッドを書き直し:

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

は今、すべてが再び取り組んでいます。