Swift 2 Дополнительная ошибка аргумента при вызове viewdidload image

я обновляю свое приложение до Swift 2 с помощью Xcode 7. это мой код viewDidLoad ViewController.

 override func viewDidLoad() {
        super.viewDidLoad()

    // Get an instance of the AVCaptureDevice class to initialize a device object and provide the video
    // as the media type parameter.
    let captureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)

    // Get an instance of the AVCaptureDeviceInput class using the previous device object.
    var error:NSError?

    let input: AnyObject! = AVCaptureDeviceInput.deviceInputWithDevice(captureDevice, error: &error)

    if (error != nil) {
        // If any error occurs, simply log the description of it and don't continue any more.
        print("\(error?.localizedDescription)")
        return
    }

    // Initialize the captureSession object.
    captureSession = AVCaptureSession()
    // Set the input device on the capture session.
    captureSession?.addInput(input as! AVCaptureInput)

    // Initialize a AVCaptureMetadataOutput object and set it as the output device to the capture session.
    let captureMetadataOutput = AVCaptureMetadataOutput()
    captureSession?.addOutput(captureMetadataOutput)

    // Set delegate and use the default dispatch queue to execute the call back
    captureMetadataOutput.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue())
    captureMetadataOutput.metadataObjectTypes = supportedBarCodes

    // Initialize the video preview layer and add it as a sublayer to the viewPreview view's layer.
    videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
    videoPreviewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill
    videoPreviewLayer?.frame = view.layer.bounds
    view.layer.addSublayer(videoPreviewLayer!)

    // Start video capture.
    captureSession?.startRunning()

    // Move the message label to the top view
    view.bringSubviewToFront(messageLabel)

    // Initialize QR Code Frame to highlight the QR code
    qrCodeFrameView = UIView()
    qrCodeFrameView?.layer.borderColor = UIColor.greenColor().CGColor
    qrCodeFrameView?.layer.borderWidth = 2
    view.addSubview(qrCodeFrameView!)
    view.bringSubviewToFront(qrCodeFrameView!)
}

онлайн

let input: AnyObject! = AVCaptureDeviceInput.deviceInputWithDevice(captureDevice, error: &error)

я получаю сообщение об ошибке Ошибка дополнительного аргумента в вызове. Я уже пробовал использовать метод do{} и catch{}, но это не сработало, я всегда получаю эту ошибку.

Как я могу это исправить? Спасибо


person markutus    schedule 29.06.2015    source источник
comment
Одна из новых функций Swift 2 заключается в том, что он выдает вместо принятия указатель NSError, так что, скорее всего, это ваша проблема.   -  person sbarow    schedule 29.06.2015
comment
@sbarow Итак, как мне это исправить?   -  person markutus    schedule 30.06.2015
comment
@markutus только что опубликовал для вас ответ.   -  person sbarow    schedule 30.06.2015


Ответы (2)


Swift 2 представил новую обработку ошибок. Чтобы решить вашу проблему, вам нужно catch ошибку вместо передачи объекта NSError методу AVCaptureDevice:

override func viewDidLoad() {
    super.viewDidLoad()

    do {
        let captureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
        let input = try AVCaptureDeviceInput(device: captureDevice)
        // Do the rest of your work...
    } catch let error as NSError {
        // Handle any errors
        print(error)
    }
}

Для более подробного объяснения взгляните на эту статью:

Обработка ошибок в Swift 2.0

person sbarow    schedule 30.06.2015

похоже, что этот метод типа больше не существует в AVCaptureDeviceInput, см. -> https://developer.apple.com/library/prerelease/ios/documentation/AVFoundation/Reference/AVCaptureDeviceInput_Class/index.html#//apple_ref/swift/cl/c:objc(cs)AVCaptureDeviceInput

(похоже, вы, вероятно, хотите использовать init(device:))

... как полезный совет: каждый раз, когда вы просматриваете библиотеку разработчика через Интернет, если вы не уверены, что видите последнюю «предварительную» версию документации, проверьте URL-адрес -> добавьте «/ prerelease» между «библиотекой» и «/ios», если необходимо :)

person fqdn    schedule 29.06.2015
comment
@markutus, вам удалось найти новую подпись для метода инициализации, на который я ссылался выше? а ты смог решить свою проблему? дайте мне знать, если вам нужна дополнительная помощь! документация, которую я связал, должна помочь вам - person fqdn; 20.07.2015