【问题标题】:Getting specific attributes from coredata swift快速从 coredata 获取特定属性
【发布时间】: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 是一个托管对象数组。如果您只创建了一个对象,则该数组只包含一个元素。

标签: ios swift core-data


【解决方案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://stackoverflow.com/a/6267875/3339346获得灵感

    【讨论】:

      猜你喜欢
      • 2018-03-25
      • 2017-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      相关资源
      最近更新 更多