ARCをオンにしてNSOperation内にNSManagedObjectContextを保存するときにいくつか問題が発生しました。 ARCがなければ、以前はすべてうまかった。保存中は常にEXC_BAD_ACCESSが与えられます。 [mainContext setRetainsRegisteredObjects:YES]を使用してEXC_BAD_ACCESS on NSManagedObjectContext NSOperationとARCの中にメソッドを保存する理由は何ですか?
//on the main thread
-(void)someFunc
{
array = ... //fetching an array of entities from a core data
for(SomeEntity * obj in array)
{
NSSomeOperation * op = [[NSSomeOperation alloc] initWithValue:[obj someField]];
//start an operation
}
}
//NSSomeOperation implementation
//...
- (void)main {
//some code
NSError * error = nil;
[mainContext lock];
if (![mainContext save:&error]) { //<--- HERE EXC_BAD_ACCESS
//process error
}
[mainContext unlock];
//some code
}
//...
:とobjectWithIDはこの問題を解決していないコードは次のようになります。
-[__NSCFType contextDidSave:]: unrecognized selector sent to instance 0x7fc5c505d940
An observer of NSManagedObjectContextDidSaveNotification illegally threw an exception.
Objects saved = {
inserted = "{(\n)}";
updated = "{(\n <SomeEntity: 0x7fc5c55b6220> (entity: SomeEntity; id: 0x7fc5c5052b20 ...)}"; }
and exception = -[__NSCFType contextDidSave:]: unrecognized selector sent to instance 0x7fc5c505d940 with userInfo = (null)
EXC_BAD_ACCESS(コード= 1)
EXC_BAD_ACCESS(コード= 13)Iは、別個の管理オブジェクトコンテキストを使用して、このNSOperation内部私の管理オブジェクトをフェッチします。
おそらく、Core DataのバグやARCに関連するものでしょうか?たぶん、ARCはオブジェクトのいくつかをきれいにします。 ARCがなければすべてうまくいっていたので、すべてうまくいきました。私がARC-EXC_BAD_ACCESSをオンにしたとき。
なぜそれが起こるのか分かりますか?
これはメインスレッドですか? – Jim
いいえ、Jim。これは別のスレッドのNSOperation内にあります。 –
これは、NSOperationをメインキュー(NSOperationQueue mainQueueを使用してaddOperation:...]に追加することができるので、私が尋ねる理由です。これはセカンダリスレッドまたはキュー上にある場合、Appleのドキュメントに従って、オブジェクトコンテキストを管理し、バックメインキューの中のコンテキストに変更をマージ – Jim