2016-12-13 8 views
0

예외 중단 점을 사용할 때 아래에서이 코드에 대한 예외가 있습니다.iOS - 관리 객체 컨텍스트 예외

이유는 모르겠지만 앱을 실행할 때마다 중단 점 트리거가 실행됩니다.

예외 중단 점에 대해 이해할 수없는 항목이 있습니까, 아니면 관리 대상 개체 컨텍스트에서 조사해야합니까?

편집 :

코드 예제 :

-(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

시도 포장

일이 될 수 무엇
self.managedObjectContext.performAndWait { 
    //all your processing managed objects 
    //finally once done 
    try! self.managedObjectContext.save() 
} 

,

당신은 managedObjects 액세스 할 수 있습니다 또는 managedObjectContext가되는 것과 다른 큐에 속할 수 있습니다 스레드에 저장 호출 될 수 당신의 self.managedObjectContext가 관련 지을 수 있습니다.

iOS 5 이상에서는 MainQueue 동시성 또는 ConcurrentQueue 동시성 모델을 사용할 때 managedObjectContext의 perform 또는 performAndWait을 사용하여 관리 대상 객체 컨텍스트가 관리 대상 객체 컨텍스트에 액세스하는 것과 동일한 큐에 속한 스레드에 의해서만 액세스되도록합니다 managedObject 컨텍스트가 연결됩니다.

+0

자세한 답변을 보내 주셔서 감사합니다. 더 많은 코드 예제를 제공하기 위해 제 질문을 수정했습니다. – Balanced