从CoreData获取数据时,结果是AnyObjects
的数组。当我将此数组转换为相关类时,我可以毫无问题地使用数据。
我的问题是,我想在初始化对象时做一些事情,但是我不知道在从CoreData获取对象后初始化对象的位置和时间。
我如何从CoreData获取数据的示例:
let request = NSFetchRequest(entityName: "Buildings")
let results = (try? context.executeFetchRequest(request)) as? [Buildings] ?? []
以我的班级为:
class Buildings: NSManagedObject {
@NSManaged var name: String
convenience init(context: NSManagedObjectContext, name: String) {
let description = NSEntityDescription.entityForName("Buildings", inManagedObjectContext: context)!
self.init(entity: description, insertIntoManagedObjectContext: context)
self.name = name
}
}
答案 0 :(得分:1)
您需要覆盖您的Buildings类中的awakeFromFetch()方法,如
func awakeFromFetch() {
super.awakeFromFetch()
// do your initialization
}
每次从持久存储中获取对象时都会调用此方法。
答案 1 :(得分:0)
你所谈论的是错误,基本上Core Data试图尽可能地保持其内存占用,并且它用于实现此目的的策略之一是错误的。当您获取实体的记录时,Core Data会执行获取请求,但它没有完全初始化表示已获取记录的托管对象。
当您访问托管对象的属性或关系时,会触发故障,这意味着Core Data会将故障更改为已实现的托管对象。