2015-10-10 2 views
1

я следующий код:UIImagePickerController фатальная ошибка: неожиданно нашли ноль в то время как разворачивание необязательное значение

func startCameraFromViewController(viewController: UIViewController, withDelegate delegate: 
protocol<UIImagePickerControllerDelegate, UINavigationControllerDelegate>) -> Bool { 

    if (UIImagePickerController.isSourceTypeAvailable(.Camera) == false) { 
     return false 
    } 

    let cameraController = UIImagePickerController() 
    cameraController.sourceType = .Camera 
    cameraController.mediaTypes = [kUTTypeMovie as String] 
    cameraController.allowsEditing = false 
    cameraController.delegate = delegate 

    presentViewController(cameraController, animated: true, completion: nil) 
    return true  
} 

она вызывается следующим образом:

func recordVideoButtonTapped() { 
    startCameraFromViewController(self, withDelegate: self) 
} 

Но по какой-то причине, я получаю следующая ошибка

fatal error: unexpectedly found nil while unwrapping an Optional value

на этой линии:

presentViewController(cameraController, animated: true, completion: nil) 

Пожалуйста, помогите отладить.

Этот вопрос отличается от

What does "fatal error: unexpectedly found nil while unwrapping an Optional value" mean?

который является более общим вопросом, относящимся к разворачиванию из

опций

Этого вопрос относится конкретно к UIImagePickerController

+0

Возможный дубликат [Что делает «фатальная ошибка: неожиданно найденная нуль при разворачивании необязательного значения» означает?] (Http://stackoverflow.com/questions/32170456/what-does-fatal-error-unexpectedly-found-nil -while-unwrapping-an-optional-valu) – jtbandes

+0

Это не дубликат. Контекст, в котором эта ошибка встречается, отличается. – Das

ответ

0

Я использую Xcode 6.4 и он отлично работает:

import UIKit 
import MobileCoreServices 

class FirstViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    func startCameraFromViewController(viewController: UIViewController, withDelegate delegate: 
     protocol<UIImagePickerControllerDelegate, UINavigationControllerDelegate>) -> Void { 

      if (UIImagePickerController.isSourceTypeAvailable(.Camera) == false) { 
       println("fail") 
       //return false 
      } 

      let cameraController = UIImagePickerController() 
      cameraController.sourceType = .Camera 
      cameraController.mediaTypes = [kUTTypeMovie as String] 
      cameraController.allowsEditing = false 
      cameraController.delegate = delegate 

      presentViewController(cameraController, animated: true, completion: nil) 
      println("ok") 
      //return true 
    } 

    @IBAction func ToSecondPressed(sender: AnyObject) { 
     startCameraFromViewController(self, withDelegate: self) 
    } 
} 
+0

Xcode 6.4 использует старый синтаксис Swift, а не Swift 2.0, поэтому, возможно, вы можете попробовать Xcode 7.0? – Das

+0

Думаю, пришло время перейти на Xcode 7 ... Я попробую. –

+0

@ Хорошо, он работает в Xcode 7.0.1 с Swift 2.0. Единственное изменение в синтаксисе - print (...) вместо println (...) в моем ответе ... –

Смежные вопросы

 Смежные вопросы