获取从Core Data加载数据的具体价值?

Pra*_*ise 1 core-data nsmanagedobject ios swift

我从Core Data获取实体,但我无法访问对象值来分配变量等.

这是我的代码:

    @IBAction func loadItem(sender: UIButton) {

    let appDel: AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
    let context: NSManagedObjectContext = appDel.managedObjectContext

    let request = NSFetchRequest(entityName: "Words")
    request.returnsObjectsAsFaults = false


    do {
        let results:NSArray = try context.executeFetchRequest(request)

        for res in results{

            print(res)
            print(res.word)

        }


    } catch {
        print("Unresolved error")
        abort()
    }


}
Run Code Online (Sandbox Code Playgroud)

print(res)工作正常,并在控制台中给我对象:

<NSManagedObject: 0x7ff0095355f0> (entity: Words; id: 0xd000000000040000 <x-coredata://0E645702-9493-4D1A-8D55-4482B7948054/Words/p1> ; data: {
image = <89504e47 0d0a1a0a 0000000d 49484452 00000a6c 000006ec 08020000 009fcbb9 fc000001 18694343 50494343 2050726f 6669>;
word = test;
})
Run Code Online (Sandbox Code Playgroud)

但是我怎样才能访问"单词"值呢?它只返回此错误:

"ViewController.swift:36:23:'Element'类型的值(又名'AnyObject')没有成员'word'"

我试图将"res"转换为NSManagedObject,但我似乎无法使其工作.

有帮助吗?

Mar*_*n R 5

你有两个选择.使用键值编码:

let results = try context.executeFetchRequest(request)
for res in results {
    print(res)
    print(res.valueForKey("word"))
}
Run Code Online (Sandbox Code Playgroud)

或者(更好)使用"Xcode-> Editor-> Create NSManagedObject subclass ......".在Xcode 7中,这将为您的项目添加两个文件"Words.swift"和"Words + CoreDataProperties.swift".

第一个文件"Words.swift"定义了Word类(您可以扩展类定义,例如添加自定义方法).

第二个文件"Words + CoreDataProperties.swift"包含所有Core Data属性的属性定义,例如:

extension Words {

    @NSManaged var word: String?
    // ...
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以将对象从获取请求转换为Word类型并直接访问属性:

let results = try context.executeFetchRequest(request) as! [Words]
for res in results {
    print(res)
    print(res.word)
}
Run Code Online (Sandbox Code Playgroud)