2016-07-15 4 views
0

나는 선택적 값에 대해 술어를 쓰려고하는데 다음 오류로 인해 응용 프로그램이 항상 중단됩니다.스위프트의 선택적 값에 대한 술어가 작동하지 않습니다.

* 의한 캐치되지 않는 예외 'NSUnknownKeyException'응용 프로그램 종료, 이유 '[valueForUndefinedKey는 :] :이 클래스는 부호화 호환 키 q_id위한 키값이 아닙니다.' * 먼저 던져 호출 스택 :

변수가 있지만이 모델에 정의하지만 난

var q_id = Int() 
잘 포장을 벗긴 그것의 동작이 변수를 변환 할 경우이

var q_id : Int! 

과 같이 정의된다

선택적 값에 대한 술어에 다른 방법이 있습니까? 당신은 원시 형이 unoptional 한 경우 다음 그것을 잘

을하고있다 :

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, 플로트,) 기본 옵션 변수 유형에서 발생한다

+0

_So는 선택적인 값에 대한 술어에 대해 다른 방법이 있습니까? _ 실제로 수행하려는 작업에 따라 다릅니다. 'q_id'가 접근 가능하다면 당신이 원하는 것을 설명하는 의사 코드를 보여줄 수 있습니까? – OOPer

+0

이 질문을 각각의 대답으로 업데이트하는 데이 코드를 사용합니다 ... –

+0

코드를 보여주십시오. – OOPer

답변

3

dictDataString 키 "q_id"값을 포함하는 NSDictionary이고, arrData은만 포함 된 것으로 가정합니다.. 클래스 ViewPostModel에서 q_idInt?의 속성입니다. 그 주어진 모든, 당신은 좀 더 스위프 티 '의 방식으로 코드를 작성할 수와

: [ViewPostModel]arrData 선언으로 (

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") 
    } 

, 당신은 위험 as! 연산자를 사용할 필요가 없습니다 당신은 몇 가지를 만들 수 있습니다. 다른 부분은 Swiftty입니다.)

일반적으로 NSPredicate을 사용하여 배열을 필터링하는 경우 Swift filter 방법과 종료 방법을 사용하는 것이 좋습니다.

+0

답장을 보내 주셔서 감사합니다.이 논리를 확인하겠습니다. –