我正在制作一个新的应用程序,我决定尝试快速开发它。 我正在使用 CoreData,我猜我有一个奇怪的行为。
我正在创建一个像这样的新项目(NSManagedObject 子类):
let managedObjectContext: NSManagedObjectContext = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext!
self.newItem = NSEntityDescription.insertNewObjectForEntityForName("Item", inManagedObjectContext: managedObjectContext) as Item
self.newItem.setValue(NSDate(), forKey: "startDate")
当我打印 startDate 时,它始终为零。它与项目的属性(链接到其他对象)相同。
在调试器中,对象 (newItem) 似乎被很好地实例化了(我看到一个 (myapp.Item!) 作为对象类型),但似乎调试器对 CoreData 并不是真正的用户友好。我找不到像在 Objective C 中那样检查或打印所有对象属性的方法。
我在这里缺少什么吗?这个实例对我来说似乎很正确,不是吗?
谢谢。
最佳答案
您在调试器中看到对象类型的事实并不意味着该对象已正确初始化。它很可能只显示您在定义 self.newItem
时在类中声明的类型。
我同意,Swift 调试器有很多不足之处。你不能依赖它来调试这种情况,除非你想学习更高级的调试器命令,但是如果你将日志语句插入到你的代码中,输入就一样多了。
检查并确认
- 您的托管对象上下文不是
nil
- 您的插入方法确实创建了一个正确的
Item
对象,它不是nil
Item
实体的托管对象子类已正确配置
也许您想先尝试创建一个新的本地 Item
变量,然后再将其分配给 self.newItem
以消除任何 ivar 错误。
如果您保存上下文,请尝试查看是否有任何变化。
尝试习惯使用子类属性访问属性,例如 newItem.startDate
而不是依赖容易出错的 valueForKey
方法。
关于ios - swift NSManagedObject 子类初始化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27720004/