2016-04-05 8 views
0

Ich habe versucht, temporären NSManagedObject zu erstellen und zu aktualisieren und nach, dass es zu Managed Object Context einfügen für das Speichern, aber Zustand auf Speicher Ich habe erhalte einen Fehler Error = Error Domain=NSCocoaErrorDomain Code=1550Temporäre Objekt für Managed Object Context

Weitere Details:

ich habe ein nächstes Modell :("Kontakt" Object Model)

Contact Object model

"ContactNumber" Objektmodell:

ContactNumber" Object model

Ihre Beziehungen:

relationships

Ich habe eine benutzerdefinierte NSView Klasse mit Eigenschaft:

@property (nonatomic, strong) Contact *selectedContact; 

In dieser Klasse I über eine Taste "Kontakt hinzufügen". Wenn ich es drücken erstelle ich ein neues temporäres Objekt „Kontakt“:

-(void)createNewContact 
{ 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Contact" 
               inManagedObjectContext:[MTAppDelegate managedObjectContext]]; 
    Contact *cnt = [[Contact alloc] initWithEntity:entity insertIntoManagedObjectContext:nil]; 
    cnt.isFavorite = @0; 
    cnt.isGroupHeader = @0; 
    cnt.defaultNumber = @0; 
    [self setSelectedContact:cnt]; 
    [self createPhoneNumber]; 
} 

Und fügen Sie zu diesem Objekt neue „Kontaktnummer“:

-(void)createPhoneNumber 
{ 
    NSEntityDescription *number = [NSEntityDescription entityForName:@"ContactNumber" inManagedObjectContext:[MTAppDelegate managedObjectContext]]; 
    ContactNumber *newNumber = [[ContactNumber alloc] initWithEntity:number insertIntoManagedObjectContext:nil]; 
    [newNumber setValue:@"" forKey:@"number"]; 
    [newNumber setValue:@"-" forKey:@"speedDial"]; 
    [newNumber setValue:@"Other" forKey:@"type"]; 
    [newNumber setValue:_selectedContact forKey:@"contact"]; 

    [_selectedContact addContactNumbersObject:newNumber]; 
} 

Nach einiger Manipulation mit _selectedContact Objekt muss ich es speichern im meinem MOC. Ich als nächstes tun:

NSError *error = nil; 
     [[MTAppDelegate managedObjectContext] insertObject:_selectedContact]; 
     if (![[MTAppDelegate managedObjectContext] save:&error]) 
     { 
      NSLog(@"Error = %@", error); 
     } 

Und ich habe nächste Fehlermeldung an:

Error = Error Domain=NSCocoaErrorDomain Code=1550 "contactNumbers is not valid." UserInfo={Dangling reference to an invalid object.=null, NSValidationErrorValue=Relationship 'contactNumbers' on managed object (0x6080000d2210) <Contact: 0x6080000d2210> (entity: Contact; id: 0x6080000369c0 <x-coredata:///Contact/t3638ED71-98B8-408A-B640-D25063C79E762> ; data: { 
    company = 44; 
    contactNumbers =  (
     "0x608000037920 <x-coredata:///ContactNumber/t3638ED71-98B8-408A-B640-D25063C79E763>" 
    ); 
    defaultNumber = 0; 
    firstName = 11; 
    isFavorite = 0; 
    isGroupHeader = 0; 
    lastName = 33; 
    middleInitial = 22; 
}) with objects {(
    <ContactNumber: 0x6080000abb20> (entity: ContactNumber; id: 0x608000037920 <x-coredata:///ContactNumber/t3638ED71-98B8-408A-B640-D25063C79E763> ; data: { 
    contact = "0x6080000369c0 <x-coredata:///Contact/t3638ED71-98B8-408A-B640-D25063C79E762>"; 
    number = ""; 
    speedDial = "-"; 
    type = Other; 
}) 
)}, NSAffectedObjectsErrorKey=(
    "<ContactNumber: 0x6080000abb20> (entity: ContactNumber; id: 0x608000037920 <x-coredata:///ContactNumber/t3638ED71-98B8-408A-B640-D25063C79E763> ; data: {\n contact = \"0x6080000369c0 <x-coredata:///Contact/t3638ED71-98B8-408A-B640-D25063C79E762>\";\n number = \"\";\n speedDial = \"-\";\n type = Other;\n})" 
), NSValidationErrorObject=<Contact: 0x6080000d2210> (entity: Contact; id: 0x6080000369c0 <x-coredata:///Contact/t3638ED71-98B8-408A-B640-D25063C79E762> ; data: { 
    company = 44; 
    contactNumbers =  (
     "0x608000037920 <x-coredata:///ContactNumber/t3638ED71-98B8-408A-B640-D25063C79E763>" 
    ); 
    defaultNumber = 0; 
    firstName = 11; 
    isFavorite = 0; 
    isGroupHeader = 0; 
    lastName = 33; 
    middleInitial = 22; 
}), NSLocalizedDescription=contactNumbers is not valid., NSValidationErrorKey=contactNumbers, NSValidationErrorShouldAttemptRecoveryKey=true} 

Bitte helfen Sie mir mit diesem.

Antwort

0

Fehler 1150 bedeutet, dass Sie einen Validierungsfehler für die Kerndaten haben. Sie versuchen also, etwas zu speichern, das den Spezifikationen Ihres Datenmodells widerspricht.

Ich würde empfehlen, Sie gehen durch alle Ihre Entitäten und Attribute und überprüfen für welche sind optional oder nicht, ob es eine Grenze für die Anzahl der Beziehungen ist, wenn die Werte Bereiche haben usw.

Log alle die geänderten Objekte und vergleichen Sie diese Regeln. Das Fehlerobjekt, das beim Speichern generiert wird, sollte tatsächlich weitere verwertbare Informationen liefern.

Es könnte auch sein, dass Sie dasselbe Objekt mehrmals als Beziehung zum selben übergeordneten Objekt hinzufügen.

"Dangling-Referenz" bedeutet, dass Sie einen Fehler in Ihrem Objektdiagramm haben. Das könnte sein, dass eine umgekehrte Beziehung möglicherweise nicht korrekt eingestellt ist.

Aus dem von Ihnen geposteten Code: Stellen Sie sicher, dass Sie Ihre neu erstellte Kontaktnummer der Contact-Entität zuweisen.

+0

Ich habe einen Verweis auf "Kontakt" Objekt festgelegt: '[NewNumber setValue: _selectedContact forKey: @ "Kontakt"];' aber nichts geändert .. bekam den gleichen Fehler – kroumvud

Verwandte Themen