How to insert new data to entity in Swift3?

与世无争的帅哥 提交于 2019-12-04 02:43:35

If there is a NSManagedObject subclass TestEntity the new syntax is

let entity = TestEntity(context: context)
entity.testAttribute="test value"
Mohamed Hashem
//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 {

}

working example:

    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)
    }

Data model inspector TestEntity Class name needs to be set to TestEntity. Previous strange behaviour seemed to be caused by this value to be blank.

I'm not an core-data expert, but the API offers 3 distinct ways of creating an NSManagedObject instance. I'm not aware if any of them offer any benefit over the other.

Assuming you have an entity/NSManagedObject subclass called TestEntity then all of the below are the same:

New way (no casting required) +iOS10:

let test = TestEntity(context: context)
test.attribute1 = "a value"

Older ways (casting is not required if you're ok with using setValue. With casting you can use dot notation. +iOS3

let testEntity =  NSEntityDescription.entity(forEntityName: "TestEntity", in: context)

let test1 = NSManagedObject(entity: testEntity!, insertInto: context)
test1.setValue("a value", forKey: "attribute1")

let test2 = NSManagedObject(entity: testEntity!, insertInto: context) as! TestEntity
test2.attribute1 = "a value"

or:

let test1 = NSEntityDescription.insertNewObject(forEntityName: "TestEntity", into: context)
test1.setValue("a value", forKey: "attribute1") 

let test2 = NSEntityDescription.insertNewObject(forEntityName: "TestEntity", into: context) as! TestEntity
test2.attribute1 = "a value"

once you create the NSManagedObject instance and assign its attributes then you just save it in the context.

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

}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!