在CoreData ios swift3中只获取表的几个属性

Posted

技术标签:

【中文标题】在CoreData ios swift3中只获取表的几个属性【英文标题】:Getting only few properties of a table in CoreData ios swift3 【发布时间】:2016-11-06 10:18:08 【问题描述】:

我将 coreData 实体定义为

在 TTFinds 中

@nonobjc public class func fetchRequest() -> NSFetchRequest<TTFinds> 
    return NSFetchRequest<TTFinds>(entityName: "TTFinds");

我正在尝试将 TTFinds 列表设为

    let request: NSFetchRequest<TTFinds> = TTFinds.fetchRequest()        
    do 
        let result = try appDel.persistentContainer.viewContext.fetch(request)

可以看出,TTFinds 得到了它的父 TTArea 对象。但是我只想得到几列。假设只有namecreationDate。怎么做?

我试过了

let request: NSFetchRequest<TTFinds> = TTFinds.fetchRequest()
        request.propertiesToFetch = NSArray.init(objects: "name", "creationDate", "image", "latitude", "longitude",
            "area.name") as? [Any];                

但是 area.name 给出了错误。

【问题讨论】:

你得到什么错误? @MartinR 错误获取请求,sigabrt 【参考方案1】:

忘记propertiesToFetch 并获取整个对象。

首先,如果您使用结果类型的字典,则只能检索选择性属性。它将使您的代码更加繁琐和冗长,而不会提高效率。

其次,如果你只是获取对象,即使它们有很多,Core Data 也会“在后台”进行各种优化,只获取它需要的东西。这是通过简单地访问您需要的属性来触发的。

因此,假设您仅获取某些属性的目的是节省内存或减少性能瓶颈,在您真正遇到这些瓶颈之前不要担心。

注意:你的关系应该是反向关系!

【讨论】:

以上是关于在CoreData ios swift3中只获取表的几个属性的主要内容,如果未能解决你的问题,请参考以下文章

Ios Swift3:lazy var fetchrequestcontroller 显示错误

Swift 3 / iOS 10,正确使用核心数据

无法在 CoreData 子类中创建新属性? iOS8 Swift3

CoreData - 获取代码 swift3

iOS 9 和 iOS 10 CoreData 同时

swift3.0:CoreData的使用