6

ProjName.xcdatamodel" " に "Questions" という名前のエンティティがあります。このエンティティには、5 つの属性 (「アイスホッケー」、「バレーボール」、「サッカー」など) があり、それぞれに type があり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 と同じでない場合はクラッシュします。

探している 1 つの結果行を取得するにはどうすればよいですか? つまり、「サッカー」、または少なくとも結果をループして各結果行のキーを比較して、間違ったキーで試してもクラッシュしないようにすることはできますか? このようなもののように:

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

私の説明が明確であることを願っています!

4

2 に答える 2

1

メソッドはvalueForKeyオプションを返します。以下のように使用できif letます

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

これは Xcode 6.3.2 で動作しますが、古いものを使用しているようです。その場合は、最新のものに更新してください。

于 2015-06-19T11:46:37.060 に答える