需要帮助。
我正在创建新的基于文档的Core Data Cocoa项目。 将名为“Entity”的实体添加到核心数据模型中。在其中添加'creationDate'属性并将其类型设置为Date。并从“编辑器”菜单中创建NSManagedObject子类。
现在我将'Entity.swift'文件添加到此代码中:
override func awakeFromInsert() {
super.awakeFromInsert()
self.creationDate = NSDate()
println("awakeFromInsert called")
}
现在在我的NSPersistentDocument子类中,我编写了一个init()方法:
init() {
super.init()
var context = self.managedObjectContext
context.undoManager.disableUndoRegistration()
var entity = NSEntityDescription.insertNewObjectForEntityForName("Entity", inManagedObjectContext: context)
context.processPendingChanges()
context.undoManager.enableUndoRegistration()
println("\(entity)")
}
一切都在编译......但是awakeFromInsert永远不会被调用!有趣的是,'实体'对象不是零!它已创建,但尚未初始化。如果我在init方法中写这行
entity.creationDate = NSDate()
然后creationDate属性将按预期设置为当前日期。
但这不是全部。如果我逐步调试执行,我可以看到执行进入'Entity.swift'文件,但从文件顶部开始,然后立即删除并返回NSPersistentDocument子类文件。
告诉我,这是一个错误吗?因为我厌倦了与这种废话斗争。感谢。
答案 0 :(得分:0)
无意中我得到了它:你必须在子类声明之前添加@objc(YourSubclass)。我经常做@objc类MySubclass并且证明它不起作用(不知道为什么)。
WORKING:
@objc(YourSubclass)
class YourSubclass : NSManagedObject {
...
不工作:
@objc class YourSubclass : NSManagedObject {
...