2016-12-13 6 views
0

Wenn ich Ausnahme-Breakpoints aktiviere, habe ich unten eine Ausnahme für diesen Code erhalten.iOS - Ausnahme für verwaltete Objektkontexte

Ich weiß nicht warum, aber jedes Mal, wenn ich die App starte, wird der Haltepunkt ausgelöst.

Gibt es etwas, das ich nicht über Ausnahme-Breakpoints verstehe, oder sollte ich den Kontext des verwalteten Objekts untersuchen?

EDIT:

Code-Beispiel:

-(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]; 
} 

Ist das auf diese Weise Sie den performAndWait Block verwenden?

Die Ausnahme Haltepunkt löst in dieser Zeile:

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

ich in diesem Beitrag gesehen, dass wir bestimmte Ausnahmen ignorieren können. ignore exception

Ist es eine gute Übung, CoreData-Ausnahmen zu ignorieren? (Ich denke nicht).

+0

Prüfprotokoll es muss ein Objekt in dieser Zeile vorhanden sein. – Amanpreet

+0

Können Sie bitte die Zeile angeben, für die Sie eine Ausnahme erhalten, und was ist die Ausnahme? –

+0

Frage bearbeitet – Balanced

Antwort

1

Try Einwickeln

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

Was passieren könnte,

Sie könnten die Managed zugreifen oder vielleicht managedObjectContext an einem Faden speichern anrufen, die auf eine andere Warteschlange als die gehören könnte, mit dem Ihr self.managedObjectContext ist verknüpft. Wenn Sie das MainQueue-Concurrency- oder das ProvateQueue-Concurrency-Modell verwenden, können Sie ManagedObjectContext perform oder performAndWait verwenden, um sicherzustellen, dass auf den verwalteten Objektkontext nur von dem Thread zugegriffen wird, der zur selben Queue gehört, mit der er verbunden ist managedObject Kontext ist zugeordnet.

+0

Vielen Dank für Ihre ausführliche Antwort. Ich habe meine Frage bearbeitet, um mehr Codebeispiel bereitzustellen. – Balanced

Verwandte Themen