2014-06-23 3 views
5

Inizio a imparare rapidamente da un po 'di tempo e desidero utilizzare alcune classi di modelli di dati scritti nell'obiettivo C. Ho un bug strano quando provo a salvare i dati dalle caselle di input:Problema con dati core di classe NSManagedObject personalizzati in swift

Users.h

#import <Foundation/Foundation.h> 
#import <CoreData/CoreData.h> 


@interface Users : NSManagedObject 

@property (nonatomic, retain) NSString * password; 
@property (nonatomic, retain) NSString * username; 

- (NSString *)toString; 
- (void)addFunny:(NSString *)prefix; 

@end 

Users.m

#import "Users.h" 


@implementation Users 

@dynamic password; 
@dynamic username; 

- (NSString *)toString 
{ 
    return @"The username is \(username) and password is \(password)"; 
} 

- (void)addFunny:(NSString *)prefix 
{ 
    self.username = [NSString stringWithFormat:@"%@%@", prefix, self.username]; 
} 

@end 

Ecco modello di dati screenshot:

data model Ecco la funzione di salvataggio:

@IBAction func btnSave_Clicked(){ 
     println("Save \(txtUsername.text)") 

     let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate 
     let context: NSManagedObjectContext = appDel.managedObjectContext 
     let ent = NSEntityDescription.entityForName("Users", inManagedObjectContext: context) 

     var newUser = Users(entity: ent, insertIntoManagedObjectContext: context) 
     newUser.username = txtUsername.text 
     newUser.password = txtPassword.text 

     context.save(nil) 
     println(newUser) 

    } 

Codice da lldb:

Unresolved error Error Domain=NSCocoaErrorDomain Code=134100 "The operation couldn’t be completed. (Cocoa error 134100.)" UserInfo=0xb736c50 {metadata={ 
    NSPersistenceFrameworkVersion = 508; 
    NSStoreModelVersionHashes =  { 
     Entity = <b2bc8535 3bcfcdf1 81eecadc d32d8511 cc030525 d4eb7d76 94d11d7c f5853918>; 
    }; 
    NSStoreModelVersionHashesVersion = 3; 
    NSStoreModelVersionIdentifiers =  (
     "" 
    ); 
    NSStoreType = SQLite; 
    NSStoreUUID = "0169C569-2A57-47F1-9EF6-684485CB1135"; 
    "_NSAutoVacuumLevel" = 2; 
}, reason=The model used to open the store is incompatible with the one used to create the store}, (error.userInfo) 
+0

Hai aggiornato il modello di coredata dopo aver installato la tua app sul dispositivo? Se sì (e senza regole di fusione) elimina l'app e resinstall per assicurarti che non ci siano conflitti relativi ai modelli aggiornati – Alexander

risposta

13

Questo non ha nulla a che fare con rapida. Se aggiornamento vostro modello CoreData senza regole che definisce la fusione/controllo delle versioni, come indicato nel Applee Doc, è necessario eliminare e reinstallare l'applicazione sul dispositivo o simulatore.

Guardate il messaggio di errore:

The model used to open the store is incompatible with the one used to create the store} 

rimuovere l'applicazione dal simulatore/o il dispositivo ed eseguire una pulizia sul progetto. Questo dovrebbe chiarire questi problemi. Assicurati di non essere in esecuzione nel debugger quando elimini l'app, altrimenti non la eliminerà in modo corretto.

Se si vuole essere sicuri sua scomparsa (simulatore), controllare questa directory

Users/INSERT_YOUR_USER_HERE/Library/Application Support/iPhone Simulator/ for your app's folder, under the version you're running. 

Non si può pretendere che la modifica del modello già installato lavorerà sul dispositivo senza ulteriori sforzi.

+0

Grazie, è stato d'aiuto quando passo ad un altro simulatore! – aladine