2016-06-19 38 views
8

In precedenza, ero in grado di utilizzare un codice come questo per aggiungere nuovi dati al mio "TestEntity" nel mio modello di dati.Come inserire nuovi dati nell'entità in Swift3?

NSManagedObject è stato creato per il mio "TestEntity" e sono stato in grado di impostare i suoi attributi con il "punto" sintassi

Alla fine, vorrei salvare il contesto

let entity=NSEntityDescription.insertNewObject(forEntityName: "TestEntity", into: context) as! TestEntity 
entity.testAttribute="test value" 
context.save() 

Questo codice non lo fa lavora in Swift3. Quando l'eseguo, ottengo il seguente errore di runtime:

Could not cast value of type 'NSManagedObject_TestEntity_' (0x175306b0) to 'testCoreData.TestEntity' (0xd6bb8). 2016-06-19 11:07:52.305195 testCoreData[689:264453] Could not cast value of type 'NSManagedObject_TestEntity_' (0x175306b0) to 'testCoreData.TestEntity' (0xd6bb8)

Qualcuno può fare luce su come questo dovrebbe essere fatto in swift3, per favore? Qualsiasi aiuto è molto apprezzato. Grazie.

La seconda parte della domanda è come accedere nuovamente ai dati. il seguente codice termina con un errore: errore irreversibile: NSArray elemento omesso di corrispondere al Swift Array Elemento Tipo

let fr:NSFetchRequest<TestEntity>=TestEntity.fetchRequest() 

do { 
    let searchResults=try context.fetch(fr) 
    if let results=searchResults { 
     for result in results { 
     print("testAtt = \(result.testAtt)") 
     } 
    } 
} catch { 

} 

risposta

4

Se c'è una sottoclasse NSManagedObjectTestEntity nuova sintassi è

let entity = TestEntity(context: context) 
entity.testAttribute="test value" 
+0

Il salvataggio deve essere inserito in blocchi 'try-catch'. – Mundi

+0

@Mundi Sì, certo, ma è irrilevante per la domanda. Ho cancellato la linea. – vadian

+0

Ho dovuto creare NSEntityDescription affinché il codice sopra funzionasse. senza di esso, ho avuto un altro errore di runtime: Terminazione dell'app a causa dell'eccezione non rilevata 'NSInvalidArgumentException', motivo: 'Un NSManagedObject di classe' testCoreData.TestEntity 'deve avere una NSEntityDescription valida.' 'let entityDes = NSEntityDescription.entity (forEntityName:" TestEntity ", in: context) let entity = TestEntity (entity: entityDes !, insertInto: context) entity.testAtt =" attributo test "' Ma poi ha funzionato. Grazie. – matyasl

1

esempio funzionante:

Ispettore modello dati TestEntity Il nome della classe deve essere impostato su TestEntity. Lo strano comportamento precedente sembrava essere causato da questo valore di essere vuoto.

3
//retrieve the entity 
let entity = NSEntityDescription.entity(forEntityName: "TestEntity", in: context) 

let testEntity = NSManagedObject(entity: entity!, insertInto: context) 

//set the entity values 
testEntity.setValue(testAtt1, forKey: "testAtt1") 
testEntity.setValue(testAtt2, forKey: "testAtt2") 

//save the object 
do { 
    try context.save() 
    print("saved!") 
} catch let error as NSError { 
    print("Could not save \(error), \(error.userInfo)") 
} catch { 

} 
+0

Impossibile caricare la classe denominata 'NomeProgetto.EntityName' per l'entità 'EntityName'. Classe non trovata, utilizzando invece NSManagedObject predefinito. – mumu

Problemi correlati