swift NSManagedObject子类初始化问题

时间:2014-12-31 10:45:09

标签: ios core-data swift nsmanagedobject nsmanagedobjectcontext

我正在制作一个新的应用程序,我决定尝试快速开发它。 我正在使用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中那样。

这里有什么我想念的吗?对我来说,实例似乎没有问题吗?

感谢。

1 个答案:

答案 0 :(得分:2)

您在调试器中看到对象类型并不意味着对象已正确初始化。在定义self.newItem时,它很可能只显示您在班级中声明的类型。

我同意,Swift调试器有很多不足之处。您不能依赖它来调试这种情况,除非您想学习更高级的调试器命令,但是如果您将代码中的日志语句插入代码中,那么输入也同样多。

检查并确认

  • 您的托管对象上下文不是nil
  • 您的insert方法确实会创建一个不是Item
  • 的正确nil对象
  • Item实体的托管对象子类已正确配置

也许您想先尝试创建一个新的本地Item变量,然后再将其分配给self.newItem以消除任何ivar错误。

如果保存上下文,请尝试查看是否有任何更改。

尝试习惯使用子类属性(例如newItem.startDate)访问属性,而不是依赖于容易出错的valueForKey方法。