如何在Swift3中向实体插入新数据?

时间:2016-06-19 09:36:19

标签: swift core-data swift3 nsmanagedobject nsentitydescription

在之前的swift中,我能够使用这样的代码将新数据添加到我的" TestEntity"在我的数据模型中。

interface是为我的" TestEntity"而创建的。我能够用" dot"设置它的属性。语法

最后,我会保存上下文

NSManagedObject

此代码在Swift3中不起作用。当我运行它时,我得到以下运行时错误:

  

无法转换类型的值#NSCEagedObject_TestEntity _'   (0x175306b0)到' testCoreData.TestEntity' (0xd6bb8)。 2016年6月19日   11:07:52.305195 testCoreData [689:264453]无法转换类型的值   ' NSManagedObject_TestEntity _' (0x175306b0)到   ' testCoreData.TestEntity' (0xd6bb8)

有人可以说明如何在swift3中完成这项工作吗?任何帮助都非常感谢。 谢谢。

问题的第二部分是如何再次访问数据。以下代码以错误结束:致命错误:let entity=NSEntityDescription.insertNewObject(forEntityName: "TestEntity", into: context) as! TestEntity entity.testAttribute="test value" context.save() 元素未能与Swift数组元素类型匹配

NSArray

4 个答案:

答案 0 :(得分:4)

如果有NSManagedObject子类TestEntity,则新语法为

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

答案 1 :(得分:3)

public class AnimationTimerExample {

    public void setUpButton(Button btn, Circle circle) {
        AnimationTimer timer = new AnimationTimer() {

            private final long delay = 10_000_000L; // This must be in 
                                                    // nanoseconds
                                                    // since "now" is in
                                                    // nanoseconds
            private long lastExecution;

            @Override
            public void handle(long now) {
                if (now - (lastExecution + delay) <= 0L {
                    // Move circle
                    lastExecution = now;
                }
            }

        };

        btn.addEventHandler(MouseEvent.MOUSE_PRESSED, me -> timer.start());
        btn.addEventHandler(MouseEvent.MOUSE_RELEASED, me -> timer.stop());
    }
}

答案 2 :(得分:1)

工作示例:

@

数据模型检查器TestEntity类名称需要设置为TestEntity。以前的奇怪行为似乎是由于这个值是空白的。

答案 3 :(得分:0)

我不是核心数据专家,但是API提供了3种不同的创建try: x = 0 while x < 50000000: x += 1 print(x) except KeyboardInterrupt: pass print("Calculation done") 实例的方式。我不知道它们中的任何一个是否提供任何其他好处。

假设您有一个名为^C的实体/ NSManagedObject子类,则以下所有内容都是相同的:

新方法(无需强制转换)NSManagedObject

TestEntity

较旧的方式(如果可以使用+iOS10,则无需广播。通过强制转换,您可以使用点符号。let test = TestEntity(context: context) test.attribute1 = "a value"

setValue

或:

+iOS3

一旦创建NSManagedObject实例并分配其属性,然后将其保存在上下文中即可。

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"