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

我的“ProjName.xcdatamodel”中有一个名为“Questions”的实体.在这个实体中,我有5个属性(“icehockey”,“排球”,“足球”……),每个属性都具有可变形的类型.每行(属性)将填充NSMutableArray.
我想要做的是获取此实体中特定属性的值.这是我的代码

func readQuestionsFromCore(sport:Nsstring) -> NSMutableArray {
    var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
    var context:NSManagedobjectContext = appDel.managedobjectContext!

    var request = NSFetchRequest(entityName: "Questions")
    request.returnsObjectsAsFaults = false
    var results: NSArray = context.executeFetchRequest(request,error: nil)!
    var qArr:NSMutableArray!
    if results.count > 0 {
        var res = results[0] as NSManagedobject
        qArr = res.valueForKey("\(sport)") as NSMutableArray
        return qArr
    } else {
        qArr = []
        return qArr
    }
}

这将是不可行的,因为我从数据库中取出结果的第一个索引(结果[0]为NSManagedobject),因此如果该元素与我正在寻找的valueForKey不同,它将崩溃.

如何获得我正在寻找的一个结果行?即“足球”,或者至少我可以以某种方式循环结果并比较每个结果行的键,这样当我尝试使用错误的键时它不会崩溃?喜欢这样的东西:

for (res) in results as NSManagedobject {
   if(res.key == "soccer") {
      qArr = res.valueForKey("soccer") as NSMutableArray
      return qArr
   }
}

我希望我的解释清楚!

解决方法

valueForKey方法返回一个可选项,你可以使用if如下

if let questionsArr = res.valueForKey("\(sport)") as? NSMutableArray {
    return questionsArr
} else {
    return []
}

这适用于Xcode 6.3.2,但看起来你使用的是旧的.如果是这样更新到最新版本.

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...