2016-06-19 3 views
8

In Swift zuvor konnte ich einen Code wie diesen verwenden, um neue Daten zu meiner "TestEntity" in meinem Datenmodell hinzuzufügen.Wie fügt man neue Daten in die Entity in Swift3 ein?

NSManagedObject wurde für meinen „TestEntity“ erstellt, und ich konnte die Attribute mit dem „Punkt“ Syntax

Am Ende gesetzt werde ich

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

Dieser Code den Kontext nicht speichern arbeite in Swift3. Wenn ich es laufen lasse, erhalte ich die folgenden Laufzeitfehler:

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)

Kann jemand etwas Licht auf, wie sollte dies in swift3 getan werden, bitte? Jede Hilfe wird sehr geschätzt. Danke.

Der zweite Teil der Frage ist, wie man wieder auf die Daten zugreifen kann. Der folgende Code endet mit einem Fehler: fatal error: NSArray Element der Swift Array Elementtyp

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 { 

} 

Antwort

4

paßt nicht bestanden, wenn es eine ist NSManagedObject Subklasse TestEntity die neue Syntax

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

Die Speicherung muss in 'try-catch'-Blöcke gespeichert werden. – Mundi

+0

@Mundi Ja natürlich, aber es ist irrelevant für die Frage. Ich habe die Zeile gelöscht. – vadian

+0

Ich musste NSEntityDescription erstellen, damit der obige Code funktioniert. ohne sie, bekam ich eine andere Laufzeitfehler: Beenden app aufgrund nicht abgefangene Ausnahme ‚NSInvalidArgumentException‘, Grund: ‚eine gültige NSEntityDescription haben muss‚‘Ein NSManagedObject der Klasse‘ testCoreData.TestEntity 'Lassen entityDes = NSEntityDescription.entity (forEntityName: "TestEntity", in: Kontext) let entity = TestEntity (Einheit: entityDes !, InsertInto: context) entity.testAtt = "test Attribut"' Aber dann hat es funktioniert. Vielen Dank. – matyasl

1

Arbeitsbeispiel ist:

let fr:NSFetchRequest<TestEntity>=TestEntity.fetchRequest() 
    do { 
     let results=try self.moc!.fetch(fr) 
     if results.count==0 { 
      print("no resutls. i need to add something") 
      let newTestEntity=TestEntity(context: self.moc!) 
      newTestEntity.testAtt="testovaci text" 
      do { 
       try self.moc!.save() 
      }catch{ 

      } 
     }else{ 
      print("already some results") 
      for result in results { 
       print(result.testAtt!) 
      } 
     } 
    }catch { 
     print(error) 
    } 

Datenmodell Inspektor TestEntity Klassenname muss TestEntity gesetzt werden. Vorheriges seltsames Verhalten schien dadurch verursacht zu sein, dass dieser Wert leer war.

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

Die Klasse 'ProjectName.EntityName' für Entität 'EntityName' konnte nicht geladen werden. Die Klasse wurde nicht gefunden und verwendet stattdessen das Standard-NSManagedObject. – mumu

Verwandte Themen