2016-07-15 12 views
0

オプションの値を述語にしようとしていますが、次のエラーで常にアプリケーションがクラッシュします。swiftのオプション値の述語が機能しない

*理由、「NSUnknownKeyException」キャッチされない例外によりにアプリを終了:「[valueForUndefinedKey:]:このクラスは、キー値コーディング準拠のキーq_idのためではありません」 *まずスローコールスタック:

変数がありますがモデルで定義するが、それは私が

var q_id = Int() 
細かいアンラップそれの働きで、この変数を変換する場合は、この

var q_id : Int! 

のように定義しています

オプションの値に述語を入れる方法は他にありますか?

let Qid = dictData.objectForKey("q_id") as? String 
let fQuesID : Int = Int(Qid!)!; 

let predicate = NSPredicate(format: "SELF.q_id == %i",fQuesID) 
let arrObj : NSArray = arrData.filteredArrayUsingPredicate(predicate) ; 
      //arrData.filter { predicate.evaluateWithObject($0) } 
if(arrObj.count > 0) 
{ 
    let objPostModel : ViewPostModel = arrObj.firstObject as! ViewPostModel; 
    objPostModel.isPollExpired = 1; // 1 Means Poll Expired! 
    self.tblViewPost?.reloadData(); 
} 

それが唯一の変数プリミティブオプションの種類で起こっている(int型、float型、等...)

更新: あなたはプリミティブ型がunoptional作る場合、それは細かい

を働いています
+0

_Soは、あなたが本当にやりたいことに依存します。 'q_id'がアクセス可能であれば、あなたがしたいことを記述する擬似コードを表示できますか? – OOPer

+0

私はそれをそれぞれの答えで質問を更新するために使用しています... –

+0

私たちにあなたのコードを教えてください。 – OOPer

答えて

3

私はdictDataStringキー「q_id」の値を含むNSDictionaryであると仮定します。 arrDataは、のみを含むNSArrayです。 クラスViewPostModelq_idは、タイプInt?のプロパティです。与えられたすべてのものと

、あなたには、いくつかのより多くのSwiftyの方法でコードを書くことができます。

if let 
     qId = dictData["q_id"] as? String, 
     fQuesID = Int(qId) 
    { 
     let arrObj = (arrData as! [ViewPostModel]).filter{$0.q_id == fQuesID} 
     if let objPostModel = arrObj.first { 
      objPostModel.isPollExpired = 1 // 1 Means Poll Expired! 
      self.tblViewPost?.reloadData() 
     } 
    } else { 
     print("invalid q_id in dictData") 
    } 

[ViewPostModel]としてあなたarrDataを宣言すると、あなたは危険なas!演算子を使用する必要もありませんあなたは、いくつかを作ることができます。 )

通常、NSPredicateを使用してアレイをフィルタリングする場合は、Swift filterメソッドとクロージャを使用することをお勧めします。

+0

あなたのクイック返信に感謝します..この論理をチェックさせてください –

関連する問題