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

Posted

技术标签:

【中文标题】从 Core Data 中获取加载数据的具体价值?【英文标题】:Getting the specific value in loading data from Core Data? 【发布时间】:2015-10-17 16:48:38 【问题描述】:

我正在从 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()
    



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;
)

但是我如何访问例如“word”值?它只返回这个错误:

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

我正在尝试将“res”转换为 NSManagedObject,但我似乎无法使其工作。

有什么帮助吗?

【问题讨论】:

【参考方案1】:

你有两个选择。要么使用键值编码:

let results = try context.executeFetchRequest(request)
for res in results 
    print(res)
    print(res.valueForKey("word"))

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

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

第二个文件“Words+CoreDataProperties.swift” 包含所有核心数据属性的属性定义, 例如:

extension Words 

    @NSManaged var word: String?
    // ...

现在您可以将 fetch 请求中的对象转换为 Word 类型并直接访问属性:

let results = try context.executeFetchRequest(request) as! [Words]
for res in results 
    print(res)
    print(res.word)

【讨论】:

太棒了!谢谢你。 :) 嗯。似乎我不得不将 Res 转换为单词。如果我将数组转换为单词数组,则 res 变量仍然是 Element。当我解决它时:让结果:NSArray = try context.executeFetchRequest(request) for res in results let nyRes = res as! Words print(res) print(nyRes.word!) 你知道用你建议的 Words 数组修复它的方法吗? @赞美:我的错。类名(通常)与实体名相同,在您的情况下为“Words”。将结果数组转换为 [Words] 应该可以工作。 没问题。我明白你的意思。但正如我上面写的;我无法让它与他们的数组一起工作,因为 res 似乎仍然是“元素”而不是“单词” @Praise:对不起,我不明白。您可以将新代码附加到问题中吗?

以上是关于从 Core Data 中获取加载数据的具体价值?的主要内容,如果未能解决你的问题,请参考以下文章

将数据从Core Data加载到Today Widget

在 Core Data 中获取具有关系的实体

如何使用 Restkit 和 Core Data 存储对象和种子预加载数据

从 Core Data 加载图像使 NavigationView 过渡变得跳跃

如何过滤从 Core Data 获取的数据?

使用 Swift 从 Core Data 中获取数据并在 UITextFields 中显示