核心数据返回0

时间:2016-02-25 04:00:32

标签: swift core-data

更新:根据评论中的一些建议,我使用NSManagedObject Subclassing。所以我的代码完全不同,所以我正在重写这个问题,以便更好地反映我现在正在做的事情。

所以我的问题是:我将非零值保存到Core Data,但是当我检索一个值时,我得到的回零。可能有什么问题?

现在让我们假设我有两个名为FirstEntity, SecondEntity的实体,其中有两个名为firstAttribute, secondAttribute的属性。因为我做了NSManagedObject子类,所以我有两个类,一个名为FirstEntity,第二个名为SecondEntity。每个类都有两个属性的扩展名(firstAttributesecondAttribute)。

保存价值 因此,当我保存一个值时,我会使用以下代码:

let number = 100
let firstEntity = NSEntityDescription.insertNewObjectForEntityForName("FirstEntity", inManagedObjectContext: managedObject) as! FirstEntity
firstEntity.firstAttribute = number

检索值:当我尝试在Core Data中接收属性的值时,我使用如下代码:

let firstEntity = NSEntityDescription.insertNewObjectForEntityForName("FirstEntity", inManagedObjectContext: managedObject) as! FirstEntity
print(firstEntity.firstAttribute) // This returns zero when I clearly saved a value of 100 above.

我是Core Data的新手,我查了很多关于如何在线使用Core Data的例子。我仍然对我可能做错的事情感到困惑。如果需要澄清,请在评论中提问,我一定会回复。

潜在错误:所以我正在尝试将函数值保存在函数的completionHandler中。另外,如果我在completionHandler内打印变量值,我会得到属性的正确值。例如:

someFunction() {
    number in // Pretend number is 5000
    let firstEntity = NSEntityDescription.insertNewObjectForEntityForName("FirstEntity", inManagedObjectContext: managedObject) as! FirstEntity
    firstEntity.firstAttribute = number
    print(firstEntity.firstAttribute) // Prints 5000 to the console
}

但是,我要说我去firstAttribute以外的completionHandler值,我将值打印到控制台我得到的值为0.例如:

class MyClass {
    func myFunction() {
        let firstEntity = NSEntityDescription.insertNewObjectForEntityForName("FirstEntity", inManagedObjectContext: managedObject) as! FirstEntity
    print(firstEntity.firstAttribute) // Prints 0
    }
}

我还想提一下,我确保函数中的completionHandler在调用MyClass的myFunction()之前设置了firstAttribute的值。

1 个答案:

答案 0 :(得分:0)

好的,所以我觉得我找到的答案是我创建了太多的实体实例。所以我最终做的是创建了一个全局常量:

let firstEntity = NSEntityDescription.insertNewObjectForEntityForName("FirstEntity", inManagedObjectContext: managedObject) as! FirstEntity

然后,当我需要检索或保存值时,我引用了firstEntity,因此我没有FirstEntity的多个实例。然后我可以从任何地方访问该值。