Problem Core Data (Versioning)

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

  • Problem Core Data (Versioning)

    Hallo! Ich habe in meiner App eine Nutzerdatenbank und diese habe ich aktualisiert, d.h. im neuen Core Data Modell V2 in der Entity "Mitarbeiter" ist jetzt auch ein Foto vom Benutzer (String mit Pfad zum Foto) mit drin.

    Anbei ein Foto vom Modell und der Code der Klasse "Mitarbeiter", sowie die Methode wenn ein neuer Mitarbeiter erzeugt wird:

    Quellcode

    1. //
    2. // Mitarbeiter.h
    3. //
    4. //
    5. #import <Foundation/Foundation.h>
    6. #import <CoreData/CoreData.h>
    7. @interface Mitarbeiter : NSManagedObject
    8. @property (nonatomic, retain) NSNumber * anwesend;
    9. @property (nonatomic, retain) NSString * beschreibung;
    10. @property (nonatomic, retain) NSString * firstName;
    11. @property (nonatomic, retain) NSString * geschlecht;
    12. @property (nonatomic, retain) NSString * lastName;
    13. @property (nonatomic, retain) NSNumber * mitarbeiterID;
    14. @property (nonatomic, retain) NSNumber * status;
    15. @property (nonatomic, retain) NSString * picture;
    16. @end
    Alles anzeigen




    Quellcode

    1. + (int)createMitarbeiterWithDict:(NSMutableDictionary *)dict {
    2. AppDelegate *appDelegate = APPDELEGATE;
    3. Mitarbeiter *mitarbeiter = (Mitarbeiter *)[NSEntityDescription insertNewObjectForEntityForName:@"Mitarbeiter" inManagedObjectContext:appDelegate.managedObjectContext];
    4. [mitarbeiter setFirstName:[dict objectForKey:@"firstName"]];
    5. [mitarbeiter setLastName:[dict objectForKey:@"lastName"]];
    6. [mitarbeiter setBeschreibung:[dict objectForKey:@"description"]];
    7. [mitarbeiter setGeschlecht:[dict objectForKey:@"geschlecht"]];
    8. [mitarbeiter setStatus:[NSNumber numberWithBool:TRUE]];
    9. [mitarbeiter setAnwesend:[NSNumber numberWithBool:FALSE]];
    10. [mitarbeiter setPicture:[dict objectForKey:@"picture"]];
    11. int newID = [DataAbstractionLayer createNewMitarbeiterID];
    12. [mitarbeiter setMitarbeiterID:[NSNumber numberWithInt:newID]];
    13. NSError *error = nil;
    14. [appDelegate.managedObjectContext save:&error];
    15. return newID;
    16. }
    Alles anzeigen



    Ich bekomm leider beim Erstellen eines Mitarbeiters immer folgenden Fehler:

    "[Mitarbeiter setPicture: ]: unrecognized selector sent to instance 0x1f1932f0"

    Könnt ihr mir helfen wieso das Attribut "picture" nicht korrekt übernommen wurde im neuen Modell?
    Die Migration habe ich mit Lightweight Migration durchgeführt. Ist mir da ein Fehler unterlaufen?

    Vielen Dank

    Maccie
  • Also was mir am Anfang passiert ist ist folgendes:

    Im Modeleditor altes DataModel angewählt (also v1.0) und über das Menu das neue Model erstellt. Dann das Attribut hinzugefügt. Und das war der Fehler. Dummerweiese ist es nämlich so, daß der Modeleditor nach dem Erstellen des neuen Models dieses zwar links im Navigator anzeigt aber das rechts im Detail erscheinende ist weiterhin das alte. Wenn man also direkt nach dem Erstellen einfach ein Attribut hinzufügt, fügt man dieses dem ALTEN Model hinzu und nicht dem neuen. Man muss erst einmal im Navigator explizit auf das neue Model gehen, damit man im Detail auch wirklich dieses Editiert.

    Ansonsten ist das eine super Step-By-Step Anleitung ist diese:

    joshjustice.wordpress.com/2011…e-data-entity-in-xcode-4/

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)