快速从 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 个属性:moneyPerSecondSave
、moneySave
、tapMultiplierSave
和tapValueSave
。
我的问题是,有没有办法在我得到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】:您可以使用NSFetchRequest
的propertiesToFetch
和resultType
属性仅检索Constants
的特定属性值。
你可以从https://***.com/a/6267875/3339346获得灵感
【讨论】:
以上是关于快速从 coredata 获取特定属性的主要内容,如果未能解决你的问题,请参考以下文章