快速从 coredata 获取特定属性

Posted

技术标签:

【中文标题】快速从 coredata 获取特定属性【英文标题】:Getting specific attributes from coredata swift 【发布时间】:2017-02-14 19:29:04 【问题描述】:

我有一个核心数据实体的请求:

override func viewWillAppear(animated: Bool) 
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

    let managedContext = appDelegate.managedObjectContext

    let fetchRequest = NSFetchRequest(entityName: "Constants")

    do 
        let results = try managedContext.executeFetchRequest(fetchRequest)
     catch let error as NSError 
        print("Could not fetch \(error), \(error.userInfo)")
    

Constants 实体内有 4 个属性:moneyPerSecondSavemoneySavetapMultiplierSavetapValueSave。 我的问题是,有没有办法在我得到results 之后创建四个变量,每个变量都保存属性的每个值。

我已经尝试过使用valueForKey

moneyConstants.money = results.valueForKey("moneySave")

但是,当我尝试此操作时,它会出现错误:“'[AnyObject]' 类型的值没有成员'valueForKey'。任何帮助将不胜感激。

【问题讨论】:

提示:results 是一个 数组 ... @MartinR 所以如果我用results[0] 创建一个变量,它大概会给我第一个属性的值?抱歉,如果这是一个愚蠢的问题,我是 swift 新手。 这与 Swift 关系不大,更多的是与 Core Data 相关(因此您可能需要阅读 Core Data Programming Guide)。 – results 是一个托管对象数组。如果您只创建了一个对象,则该数组只包含一个元素。 【参考方案1】:

'results' 是一个包含 'Any' 类型的数组。您可以将其转换为您期望的类型的数组,然后像这样获取其余数据:

     if let constants = results as? [Constants] 
            let moneyPerSecond = constants[0].moneyPerSecondSave
            print("moneyPerSecond: \(moneyPerSecond)")
        

你当然也可以使用 valueForKey,像这样:

        if let match = results[0] as? Constants 
            let money = match.value(forKey: "moneySave") as! Float
            print("money: \(money)")
        

【讨论】:

【参考方案2】:

您可以使用NSFetchRequestpropertiesToFetchresultType 属性仅检索Constants 的特定属性值。 你可以从https://***.com/a/6267875/3339346获得灵感

【讨论】:

以上是关于快速从 coredata 获取特定属性的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 CoreData DB 中特定属性的总和?

从 CoreData 中获取比较和删除字符串

ios coredata 会在新版本中更改实体属性导致崩溃

Swift 从实体(核心数据)获取特定的 NSManagedObject

Xcode 8.1 核心数据获取特定属性

CoreData 获取问题:获取具有特定日期数组的实体