从CoreData获取并进行投射

时间:2016-02-03 14:38:12

标签: swift core-data initialization

从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
    }
}

2 个答案:

答案 0 :(得分:1)

您需要覆盖您的Buildings类中的awakeFromFetch()方法,如

func awakeFromFetch() {
    super.awakeFromFetch()
    // do your initialization
}

每次从持久存储中获取对象时都会调用此方法。

答案 1 :(得分:0)

你所谈论的是错误,基本上Core Data试图尽可能地保持其内存占用,并且它用于实现此目的的策略之一是错误的。当您获取实体的记录时,Core Data会执行获取请求,但它没有完全初始化表示已获取记录的托管对象。

当您访问托管对象的属性或关系时,会触发故障,这意味着Core Data会将故障更改为已实现的托管对象。