2016-12-13 3 views
0

例外ブレークポイントを有効にすると、以下のこのコードでは例外が発生します。iOS - 管理オブジェクトコンテキスト例外

なぜか分かりませんが、私がアプリケーションを起動するたびにブレークポイントがトリガされます。

例外ブレークポイントについてわからないことがあるのですか、または管理対象オブジェクトのコンテキストで調査する必要がありますか?

EDIT:

コード例:

-(void)parseJson 
{ 
    _resultArray = [[NSMutableArray alloc]init]; 
    BOOL success = YES; 
    NSError *saveError = nil; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mergeCoreDataChangesToMainContext:) name:NSManagedObjectContextDidSaveNotification object:self.managedObjectContext]; 

    [self doCustomActionBeforeParsing]; 
    for (NSDictionary* entries in _jsonArray) { 
     id aMTLObject = [[MTLDatabaseManager sharedInstance] mantleObjectModel:_modelClass anItem:entries]; 
     [self doCustomActionBeforeCoreDataInsertionOfMantleObject:aMTLObject]; 
     [[MTLDatabaseManager sharedInstance] insertMantleObjectInContext:aMTLObject aManagedObjectContext:self.managedObjectContext]; 
     if ([self isCancelled]) 
      break; 
    } 

    if (![self isCancelled] && [self.managedObjectContext hasChanges]) { 
     [self.managedObjectContext performBlockAndWait:^{ 
      success = [self.managedObjectContext save:&saveError]; 
     }]; 
    } 

    if (![self isCancelled]) { 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      if (success) { 
       [self.delegate parserDidFinishParsingOperation:self fromUrl:self.dataUrl]; 
      } else { 
       [self.delegate parserOperation:self didFailParsingOperationWithError:saveError fromUrl:self.dataUrl]; 
      } 
     }); 
    } 

    [[NSNotificationCenter defaultCenter] removeObserver:self name:NSManagedObjectContextDidSaveNotification object:self.managedObjectContext]; 
} 

が、これはあなたがperformAndWaitブロックを使用し、そのようですか?

例外ブレークポイントは、このラインでトリガー:私たちは一定の例外を無視することができ、この記事で見た

success = [self.managedObjectContext save:&saveError]; 

ignore exception

CoreData例外を無視することをお勧めしますか? (私はそう思わない)。

+0

チェックログこの行に何らかのオブジェクトがある必要があります。 – Amanpreet

+0

例外が発生する行を指定してください。特に例外は何ですか? –

+0

質問を編集 – Balanced

答えて

1

はあなたがmanagedObjectsにアクセスされる可能性がありますか、あなたのものとは別のキューに属している可能性がありますスレッドを節約managedObjectContextを呼ぶかもしれない、

が起きかもしれない何

self.managedObjectContext.performAndWait { 
    //all your processing managed objects 
    //finally once done 
    try! self.managedObjectContext.save() 
} 

をラップ試してみてくださいself.managedObjectContextが関連付けられています。

iOS 5以降では、MainQueue並行性モデルまたはProvateQueue並行性モデルを使用すると、ManagedObjectContextのperformまたはperformAndWaitを使用して、マネージオブジェクトのコンテキストにアクセスすることができます。 managedObjectコンテキストが関連付けられています。

+0

詳細な回答ありがとうございます。私はより多くのコード例を提供するために私の質問を編集しました。 – Balanced

関連する問題