核心数据的新特性和我有两个问题:正确初始化NSManagedObject
,并保留其在便利和指定初始值设定项之间的值。初始化核心数据管理对象
我在我的AnalyticsEvent NSManagedObject
子类代码:
@NSManaged public var eventName: String?
@NSManaged public var type: String?
@NSManaged public var reference: String?
@NSManaged public var timestamp: Double
public required init() {
// Initialize CoreData stack...
let manager = CoreDataManager(modelName: "Analytics", storeName: "Analytics")
// I'm not sure what I should be using to instantiate a new entity here...
// I believe the entity(forEntityName:in:) class method should return an existing value stored in managedObjectContext...
let event = NSEntityDescription.entity(forEntityName: "Event", in: manager.managedObjectContext!)
// ... and insertNewObject(forEntityName:into:) to create a placeholder
// for my new object until I issue saveContext() on managedObjectContext.
// This isn't working right now, so comment out following line
//let event = NSEntityDescription.insertNewObject(forEntityName: "Event", into: database.managedObjectContext!) as! AnalyticsEvent
super.init(entity: event!, insertInto: database.managedObjectContext)
let customProperties = CustomProperties()
self.customPropertiesData = NSKeyedArchiver.archivedData(withRootObject: properties) as Data
self.timestamp = Date().timeIntervalSince1970
}
public convenience init(eventName: String) {
self.init()
// At this point the data set in my designated initializer (above),
// the values have been lost. For example, timestamp == 0
self.eventName = eventName
self.type = EventType.discreteEvent
}
谢谢!
编辑:
进一步调查可能会发现,也许我的便利初始化正在被super.init(entity:insertInto:)
调用来调用,如果是,我不知道它是怎么找到的便利初始化的选择...但它会解释为什么它的值(如时间戳)没有被保留 - 因为它是对象的新实例?!嗯......
编辑2:
我忘了说我得到这个运行时错误当执行到行:
self.eventName = eventName
CoreData:错误:变异托管对象0x7fa2da54da90(0x7fa2da54da40 )在它从上下文中移除之后。
谢谢,但我也试过。没有运气!它也提供相同的运行时错误。 –
@AlexSmith我正在研究初始化器和'@ NSManaged'实际上现在意味着什么...你见过这个答案:http://stackoverflow.com/a/39239651/1060154我不能担保它,但会快速尝试! – MathewS
再次感谢,但不幸的是不是我所需要的。和以前一样... –