2014-10-10 2 views
0

이 코드는 제가 작성한 이후로 저에게 효과적 이었지만, 오늘은 저를 위해 일하기로 마음 먹었습니다. 나는이 문제를 대다수의 시간에 해결하려고 노력해 왔으며 천천히 나를 미치게 만들었다. 계속 "치명적인 오류가 발생했습니다 : 예기치 않게 선택적 값을 래핑하지 않는 동안"오류가 발생했습니다. 나는 그것이 의미하는 바를 이해하지만 그것을 고칠 수는 없다. 이 스레드 ("unexpectedly found nil while unwrapping an Optional value" when retriveing PFFile from Parse.com)를 발견하고 해결책을 시도했지만 작동하지 않았습니다. 내가 제대로 getDataInBackgroundWithBlock 전에 뒀다 인쇄 라인이 PFFile 난 내 구문 분석 데이터 브라우저에서 액세스 시도하고를 출력하기 때문에 userImageFile이 전무 아니라는 것을 알고일주일 후에 코드가 작동을 멈 춥니 다. 치명적인 오류가 발생했습니다 : 옵션 값을 unwrapping하는 동안 예기치 않게 발견되었습니다.

if let userImageFile: AnyObject = content["imageFile"] as? PFFile { 
println("Here is your userImageFile: \(userImageFile)") 
      userImageFile.getDataInBackgroundWithBlock { (imageData:NSData!, error:NSError!) -> Void in 
       if error == nil 
       { 
        var contentImage = UIImage(data: imageData) 
        self.feedView.image = contentImage 
       } 
      } 
     } 

: 여기 내 코드입니다. 나는 그것이 일주일 동안 어떻게 일할 수 있는지 이해하지 못하고 갑자기 일하는 것을 멈춘다. 누군가가 나를 도울 수 있다면, 나는 정말로 감사 할 것입니다. 감사!

그래서 많은 시간 동안 내 책상에 내 머리를 두드리는 후, 나는 마침내 그것을 나사 말했다 단지를 다시 작성하고 다시 일을했다, 내 코드를 삭제 대답은 ... 이것은 지금 작업 코드,하지만 나는 또한 아래 게시물의 제안으로 조금 업데이 트했습니다.

if let imageFile: AnyObject = content["imageFile"] as? PFFile { 

      imageFile.getDataInBackgroundWithBlock({ (imageData:NSData!, error:NSError!) -> Void in 

       if let imageData = imageData 
       { 
        dispatch_async(dispatch_get_main_queue()) 
        { 
         var contentImage = UIImage(data: imageData) 
         self.feedView.image = contentImage 
        } 
       } 
       else 
       { 
        //Do something else 
       } 
      }) 
     } 

답변

1

userImageFile하지 nil하더라도, 당신은 폐쇄에 전달 imageDatanil이 아니라고 가정하고 있습니다. 나는 이미지가 실제로 서버 측에 존재하는지 확인하고 다음과 같이 폐쇄 코드를 수정합니다 :

if let imageData = imageData { 
    dispatch_async(dispatch_get_main_queue()) { 
     var contentImage = UIImage(data: imageData) 
     self.feedView.image = contentImage 
    } 
} else { 
    // Something happened 
} 

선택 명시 적으로 풀어 기술적 nil 될 수 있음을 기억 - 아직 옵션, 그러나 당신이 컴파일러를 지시하는 그것을 선택 사항이 아닌 것으로 간주합니다 (즉, 자동으로 unwrap).

또한 UI 구성 요소가 주 스레드가 아닌 스레드에서 수정된다는 점도 유의하십시오. 주 스레드의 dispatch_async에 동봉하는 것이 좋습니다.

+0

응답 해 주셔서 감사합니다. 귀하의 코드를 사용해 보았지만 동일한 "치명적인 오류가 발생했습니다 : 선택 값을 래핑하는 동안 예기치 않게 nil이 발견되었습니다"오류가 발생합니다. – user3353890

+0

코드를 단계별로 실행하여 어떤 행이 예외를 발생시키고 있는지 파악할 수 있습니까? – Antonio

+0

코드를 실행하려고하면 위의 코드가있는 viewController가 필요하지만 특정 라인을 강조 표시하지 않습니다 .... 아마도 내가 잘못하고있는 것일까 요? 내가받는 오류의 스크린 샷을 포함하도록 내 질문을 편집했습니다. – user3353890

관련 문제