更新:根据评论中的一些建议,我使用NSManagedObject Subclassing
。所以我的代码完全不同,所以我正在重写这个问题,以便更好地反映我现在正在做的事情。
所以我的问题是:我将非零值保存到Core Data,但是当我检索一个值时,我得到的回零。可能有什么问题?
现在让我们假设我有两个名为FirstEntity, SecondEntity
的实体,其中有两个名为firstAttribute, secondAttribute
的属性。因为我做了NSManagedObject子类,所以我有两个类,一个名为FirstEntity
,第二个名为SecondEntity
。每个类都有两个属性的扩展名(firstAttribute
,secondAttribute
)。
保存价值 因此,当我保存一个值时,我会使用以下代码:
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的值。
答案 0 :(得分:0)
好的,所以我觉得我找到的答案是我创建了太多的实体实例。所以我最终做的是创建了一个全局常量:
let firstEntity = NSEntityDescription.insertNewObjectForEntityForName("FirstEntity", inManagedObjectContext: managedObject) as! FirstEntity
然后,当我需要检索或保存值时,我引用了firstEntity
,因此我没有FirstEntity
的多个实例。然后我可以从任何地方访问该值。