【发布时间】:2015-06-12 07:56:55
【问题描述】:
我的“ProjName.xcdatamodel”中有一个名为“问题”的实体。在这个实体中,我有 5 个属性(“冰球”、“排球”、“足球”、...),每个属性的类型为 transformable。每行(属性)都将填充一个 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
}
}
这当然行不通,因为我从数据库 (results[0] as NSManagedObject) 中取出了结果的第一个索引,因此如果该元素与我正在寻找的 valueForKey 不同,它将崩溃。
如何获得我正在寻找的一个结果行? IE。 “足球”,或者至少我可以以某种方式遍历结果并比较每个结果行的键,这样当我尝试使用错误的键时它不会崩溃?像这样:
for (res) in results as NSManagedObject {
if(res.key == "soccer") {
qArr = res.valueForKey("soccer") as NSMutableArray
return qArr
}
}
希望我的解释清楚!
【问题讨论】:
-
帮助将不胜感激。我在互联网上搜索了糟糕的运气!
-
我认为您需要将 NSPredicate 添加到您的“请求”中。然后,您可以筛选您希望从实体接收的数据。看看这个链接,例如:nshipster.com/nspredicate
-
@KevinHorgan 会在家里试试!
-
你为什么不为 Questions 实体使用自定义子类?为什么您的实体有 5 个属性,而不是 2 个,即“运动”和“问题”,这样您就可以过滤结果?任何具体原因
标签: swift nsmanagedobject nsmanagedobjectcontext xcdatamodel