CoreData Error

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • CoreData Error

    Hi, ich habe eine App in der schon vorgefüllte Daten aus einer SQLite geladen werden. Das Anzeigen funktioniert auch fehlerfrei.

    So, nun möchte ich natürlich meine Daten erweitern.

    Quellcode

    1. NSManagedObjectContext *context = [self managedObjectContext];
    2. Entries * entry = [NSEntityDescription
    3. insertNewObjectForEntityForName:@"Entries"
    4. inManagedObjectContext:context];
    5. entry.title = @"Hallo";
    6. entry.entry = @"Entry";
    7. NSError * error = nil;
    8. if (![context save:&error])
    9. {
    10. }
    Alles anzeigen


    Jetzt stürzt er beim Speichern ab, mit folgender Meldung

    CoreData: error: (19) PRIMARY KEY must be unique


    In meiner SQLite von der ich importiere ist Z_PK als PRIM markiert.
    Habs auch mal mit AutoIncrement getestet, aber keine Auswirkungen.

    Irgendwelche Ideen?

    Danke
  • Klingt mir danach, dass der managedObjectcontext nicht der richtige ist.
    Kann es sein, dass er nur nach den updates schaut und nicht in den gesamten, oder umgekehrt?

    Liebe Grüße
    Karin
  • Hi,

    nö, so mache ich es ja auch und checke via NSUserDefaults-Eintrag, ob die App schon mal gestartet wurde.

    Nur ins Blaue: Ändere den Objektnamen "entry" in "entryA" oder was auch immer.

    Liebe Grüße
    Karin
  • Ich finde nix :(
    Ich lade gleich mal ein Sample hoch, vlt. findet dann ja jemand etwas, bzw. könnte mal drüber schauen ...

    Edit:
    Hier knallts auch

    Quellcode

    1. Entries * entries = (Entries *)[[self fetchedResultsController] objectAtIndexPath:indexPath];
    2. NSManagedObjectContext * context = [self managedObjectContext];
    3. [context deleteObject:entries];
    4. [[AppDelegate sharedDelegate] saveContext];


    Also scheint wohl wirklich was mit dem MOC nicht zu stimmen :/

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von matz ()

  • die obere Fehlermeldung erhälst du wenn du ein attribut aus primary key definiert hast und dann diesem attribut einen Wert zuweist den es schon gibt, bzw gar keinen. Hast Du vlt ein Attribut "Id" oder so definiert dessen default du auf 0 setzt beim anlegen?

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Das mein ich ja. Du setzt nur Title und Entry aber wenn die Entity noch weitere Attribute hat, dann werden diese ja mit defaults gefüllt. Ist eines der Attribute als primary key gesetzt muss es eben auch eine unique inhalt haben. Setzt du diesen key also nicht (was du ja nicht tust denn du setzt ja nur title und entry) dann bekommt er den default wert, welcher aber schon vergeben ist und es kommt genau dieser Fehler. Du solltest schon wissen wie dein DataModel aussieht und vor allem solltest Du CoreData nicht als Datenbank einsetzen.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • matz schrieb:

    Nur habe ich doch in meinem xdatamodel garkein Z_PK.
    doch unterhalb:
    CREATE TABLE ZENTRIES ( Z_PK INTEGER PRIMARY KEY, Z_ENT INTEGER, Z_OPT INTEGER, ZNOTICE INTEGER, ZENTRY VARCHAR, ZTITLE VARCHAR )

    Ich analysiere immer mit dem SQLiteManager. Der hat mir schon oft geholfen.

    Liebe Grüße
    Karin

    P.S.: Nächster Z_PK findet sich übrigens in ZNOTICES
  • AppleDeveloper schrieb:

    Hast du das Problem gelöst bekommen? Wenn ja wie? Ich stehe gerade vor dem selben Problem und weiß nicht, wie ich es lösen kann.

    Edit: Hat sich erledigt.

    Danke, dass du alle daran teilhaben lässt.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Soory, habe ich vergessen. Bei mir hat es auf einmal funktioniert, als ich den Context und die Datenbank anders erstellt habe. So sieht das bei mir jetzt aus:

    Quellcode

    1. - (void)saveContext
    2. {
    3. NSError *error;
    4. if (_managedObjectContext != nil) {
    5. if ([_managedObjectContext hasChanges] && ![_managedObjectContext save:&error]) {
    6. /*
    7. Replace this implementation with code to handle the error appropriately.
    8. abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
    9. */
    10. NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    11. abort();
    12. }
    13. }
    14. }
    15. #pragma mark -
    16. #pragma mark Core Data stack
    17. - (NSManagedObjectContext *) managedObjectContext
    18. {
    19. if (_managedObjectContext != nil) {
    20. return _managedObjectContext;
    21. }
    22. _managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
    23. NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel()];
    24. [_managedObjectContext setPersistentStoreCoordinator:coordinator];
    25. NSString *STORE_TYPE = NSSQLiteStoreType;
    26. NSString *storePath = [[[self applicationDocumentsDirectory] path] stringByAppendingPathComponent:@"Data.sqlite"];
    27. NSURL *url = [NSURL fileURLWithPath:storePath];
    28. NSError *error;
    29. NSPersistentStore *newStore = [coordinator addPersistentStoreWithType:STORE_TYPE configuration:nil URL:url options:nil error:&error];
    30. if (newStore == nil) {
    31. NSLog(@"Store Configuration Failure %@", ([error localizedDescription] != nil) ? [error localizedDescription] : @"Unknown Error");
    32. }
    33. [self saveContext];
    34. return _managedObjectContext;
    35. }
    36. static NSManagedObjectModel *managedObjectModel()
    37. {
    38. static NSManagedObjectModel *model = nil;
    39. if (model != nil) {
    40. return model;
    41. }
    42. NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Data" withExtension:@"momd"];
    43. model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    44. return model;
    45. }
    Alles anzeigen

    Damit bekomme ich diesen Fehler nicht mehr und es funktioniert alles.