我正在制作一个新的应用程序,我决定尝试快速开发它。 我正在使用CoreData,我猜我有一种奇怪的行为。
我正在创建一个新的Item(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并不是真正用户友好。我发现没有办法检查或打印所有对象的属性,就像在objectiveC中那样。
这里有什么我想念的吗?对我来说,实例似乎没有问题吗?
感谢。
答案 0 :(得分:2)
您在调试器中看到对象类型并不意味着对象已正确初始化。在定义self.newItem
时,它很可能只显示您在班级中声明的类型。
我同意,Swift调试器有很多不足之处。您不能依赖它来调试这种情况,除非您想学习更高级的调试器命令,但是如果您将代码中的日志语句插入代码中,那么输入也同样多。
检查并确认
nil
Item
nil
对象
Item
实体的托管对象子类已正确配置也许您想先尝试创建一个新的本地Item
变量,然后再将其分配给self.newItem
以消除任何ivar错误。
如果保存上下文,请尝试查看是否有任何更改。
尝试习惯使用子类属性(例如newItem.startDate
)访问属性,而不是依赖于容易出错的valueForKey
方法。