Core Data

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

  • Hallo zusammen! Ich habe noch recht wenig Erfahrungen und lerne mich gerade in die komplette Gesichte mit SWIFT ein. An und sich sind schon ein paar schöne Fortschritte zu erkennen, aber jetzt stehe ich wiedermal vor einem Problem:

    zuerst habe ich folgendes laufen lassen:

    Quellcode

    1. import UIKit
    2. import CoreData
    3. class ViewController: UIViewController {
    4. override func viewDidLoad() {
    5. super.viewDidLoad()
    6. var appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    7. var context:NSManagedObjectContext = appDel.managedObjectContext!
    8. var newUser = NSEntityDescription.insertNewObjectForEntityForName("User", inManagedObjectContext: context) as NSManagedObject
    9. newUser.setValue("Stefan", forKey: "name")
    10. newUser.setValue("blabla", forKey: "city")
    11. context.save(nil)
    12. var request = NSFetchRequest(entityName: "User")
    13. request.returnsObjectsAsFaults = false
    14. var results = context.executeFetchRequest(request, error: nil)
    15. println(results)
    16. for result: AnyObject in results! {
    17. println(result)
    18. }
    19. }
    20. override func didReceiveMemoryWarning() {
    21. super.didReceiveMemoryWarning()
    22. // Dispose of any resources that can be recreated.
    23. }
    24. }
    Alles anzeigen


    dann habe ich ein Attribut hinzugefügt "test"

    Quellcode

    1. import UIKit
    2. import CoreData
    3. class ViewController: UIViewController {
    4. override func viewDidLoad() {
    5. super.viewDidLoad()
    6. var appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    7. var context:NSManagedObjectContext = appDel.managedObjectContext!
    8. var newUser = NSEntityDescription.insertNewObjectForEntityForName("User", inManagedObjectContext: context) as NSManagedObject
    9. newUser.setValue("Stefan", forKey: "name")
    10. newUser.setValue("blabla", forKey: "city")
    11. newUser.setValue("test", forKey: "test")
    12. context.save(nil)
    13. var request = NSFetchRequest(entityName: "User")
    14. request.returnsObjectsAsFaults = false
    15. var results = context.executeFetchRequest(request, error: nil)
    16. println(results)
    17. for result: AnyObject in results! {
    18. println(result)
    19. }
    20. }
    21. override func didReceiveMemoryWarning() {
    22. super.didReceiveMemoryWarning()
    23. // Dispose of any resources that can be recreated.
    24. }
    25. }
    Alles anzeigen


    jetzt bekomme ich immer folgende Fehler:

    2015-02-05 15:28:22.391 CoreData2[18686:261603] CoreData: error: -addPersistentStoreWithType:SQLite configuration:(null) URL:file:///Users/stefanwahrendorff/Library/Developer/CoreSimulator/Devices/C9E7F978-0CDE-4507-8384-05431D4AFF92/data/Containers/Data/Application/93A8342F-5035-4A53-BF21-629D1E1CD895/Documents/CoreData2.sqlite options:(null) ... returned error Error Domain=NSCocoaErrorDomain Code=134100 "The operation couldn’t be completed. (Cocoa error 134100.)" UserInfo=0x7b0955c0 {metadata={

    NSPersistenceFrameworkVersion = 519;

    NSStoreModelVersionHashes = {

    User = <4ecf768c 3f351584 8af221fb b500b542 387bea63 41259785 d690e365 15d59c22>;

    };

    NSStoreModelVersionHashesVersion = 3;

    NSStoreModelVersionIdentifiers = (

    ""

    );

    NSStoreType = SQLite;

    NSStoreUUID = "7D201C25-21C5-414A-A36A-C105E442ACA3";

    "_NSAutoVacuumLevel" = 2;

    }, reason=The model used to open the store is incompatible with the one used to create the store} with userInfo dictionary {

    metadata = {

    NSPersistenceFrameworkVersion = 519;

    NSStoreModelVersionHashes = {

    User = <4ecf768c 3f351584 8af221fb b500b542 387bea63 41259785 d690e365 15d59c22>;

    };

    NSStoreModelVersionHashesVersion = 3;

    NSStoreModelVersionIdentifiers = (

    ""

    );

    NSStoreType = SQLite;

    NSStoreUUID = "7D201C25-21C5-414A-A36A-C105E442ACA3";

    "_NSAutoVacuumLevel" = 2;

    };

    reason = "The model used to open the store is incompatible with the one used to create the store";

    }

    2015-02-05 15:28:22.393 CoreData2[18686:261603] Unresolved error Optional(Error Domain=YOUR_ERROR_DOMAIN Code=9999 "Failed to initialize the application's saved data" UserInfo=0x7b092d00 {NSLocalizedDescription=Failed to initialize the application's saved data, NSUnderlyingError=0x7b0955e0 "The operation couldn’t be completed. (Cocoa error 134100.)", NSLocalizedFailureReason=There was an error creating or loading the application's saved data.}), Optional([NSLocalizedDescription: Failed to initialize the application's saved data, NSUnderlyingError: Error Domain=NSCocoaErrorDomain Code=134100 "The operation couldn’t be completed. (Cocoa error 134100.)" UserInfo=0x7b0955c0 {metadata={

    NSPersistenceFrameworkVersion = 519;

    NSStoreModelVersionHashes = {

    User = <4ecf768c 3f351584 8af221fb b500b542 387bea63 41259785 d690e365 15d59c22>;

    };

    NSStoreModelVersionHashesVersion = 3;

    NSStoreModelVersionIdentifiers = (

    ""

    );

    NSStoreType = SQLite;

    NSStoreUUID = "7D201C25-21C5-414A-A36A-C105E442ACA3";

    "_NSAutoVacuumLevel" = 2;

    }, reason=The model used to open the store is incompatible with the one used to create the store}, NSLocalizedFailureReason: There was an error creating or loading the application's saved data.])

    (lldb)



    sehe ich das richtig, das ich mein Model nicht mehr verändern kann wenn bereits Einträge darin vorhanden sind? Nur indem ich das komplette Model lösche und ein neues hinzufüge?
  • Jede Änderung am Modell hat eine Änderung am Datenbankschema zur Folge.
    Damit wird das aktuelle Datenbankschema ungültig und Du musst Dich um die Migration kümmern.
    Zum Glück ist die Lightweight Migration ziemlich zuverlässig.

    Alternativ: App vom Gerät werfen und noch mal draufspielen.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Danke! Ich bin immer davon ausgegangen das, dass Model auch die Datenbank ist und wenn ich das Model lösche die Datenbank dann natürlich auch gelöscht wird.

    Anderes Thema:

    Wenn ich nun Daten ausgelesen habe, wie kann ich diese nun in einen String konvertieren? Ich komme von von AnyObject einfach nicht zu einem String...

    Quellcode

    1. var newTestString = [String]()
    2. func createUsersArray() {
    3. var appDel : AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    4. var context : NSManagedObjectContext = appDel.managedObjectContext!
    5. var request = NSFetchRequest(entityName: "User")
    6. request.returnsObjectsAsFaults = false
    7. var results = context.executeFetchRequest(request, error: nil)
    8. println(results)
    9. for result in results!{
    10. println(result.valueForKey("name"))
    11. newTestString = result.valueForKey("name") as NSString
    12. }
    13. }
    Alles anzeigen


    Ziel ist es zum Beispiel mit dem Array UITableViewCell zu füttern...

    EDIT:

    danke, ich habe raus. Ich merke immer wieder das man die Basics sogar von FOR IN schlafen wirklich genau kennen muss... dann kommt man mit logischem denken selbst drauf.

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