質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1873閲覧

Extra argument 'error' in call

takhub

総合スコア28

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2016/07/20 10:39

編集2016/07/21 21:59

栄養管理アプリを作成している者です。
下記URLを参考にバーコードスキャン機能を実装しています。
http://swift-salaryman.com/avmetadataobject.php

下記のエラーが出ており解決方法を探しています。

Extra argument 'error' in call

該当コードは下記です。

swift

1 let input : AVCaptureDeviceInput? = AVCaptureDeviceInput.deviceInputWithDevice(device, error: &error) as? AVCaptureDeviceInput 2 if input != nil { 3 session.addInput(input) 4 }else { 5 print(error) 6 }

スタックオーバーフローの回答を参考に解決しようとしていますが、上記コードの場合どう書けばよいのかわからずつまづいております。

http://ja.stackoverflow.com/questions/14489/swift-2を使うとnsjsonserialization-jsonobjectwithdataでコンパイルエラー-extra-argument-er

「Swift 2ではエラー処理の方法が変わり、新たにErrorType、do〜try〜catchやthrowという構文が導入されました。
それに合わせてObjective-CにおいてNSErrorのダブルポインタを渡していたところはtry構文を使って書くように変更されました。」

ご教示お願いいたします。よろしくお願いします。

追記:

エラー画面

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

以下のように変更して試してみてください。

swift

1do { 2 let input = try AVCaptureDeviceInput(device: device) 3 session.addInput(input) 4} catch let error as NSError { 5 print(error) 6}

確認したコード

swift

1import UIKit 2import AVFoundation 3 4class ViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate { 5 6 let session: AVCaptureSession = AVCaptureSession() 7 var prevlayer: AVCaptureVideoPreviewLayer! 8 var hview: UIView = UIView() 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 13 //準備(サイズ調整、ボーダーカラー、カメラオブジェクト取得、エラー処理) 14 self.hview.layer.borderColor = UIColor.greenColor().CGColor 15 self.hview.layer.borderWidth = 3 16 self.view.addSubview(self.hview) 17 let device = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo) 18 19 20 //インプット 21 do { 22 let input = try AVCaptureDeviceInput(device: device) 23 session.addInput(input) 24 } catch let error as NSError { 25 print(error) 26 } 27 28 //アウトプット 29 let output = AVCaptureMetadataOutput() 30 output.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue()) 31 session.addOutput(output)//プレビューアウトプットセット 32 output.metadataObjectTypes = output.availableMetadataObjectTypes 33 prevlayer = AVCaptureVideoPreviewLayer(session: session) as AVCaptureVideoPreviewLayer 34 prevlayer.frame = self.view.bounds 35 prevlayer.videoGravity = AVLayerVideoGravityResizeAspectFill 36 self.view.layer.addSublayer(prevlayer) 37 38 session.startRunning()//開始! 39 40 } 41 42 //バーコードが見つかった時に呼ばれる 43 func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) { 44 45 var highlightViewRect = CGRectZero 46 var barCodeObject : AVMetadataObject! 47 var detectionString : String! 48 49 //対応バーコードタイプ 50 let barCodeTypes = [AVMetadataObjectTypeUPCECode, 51 AVMetadataObjectTypeCode39Code, 52 AVMetadataObjectTypeCode39Mod43Code, 53 AVMetadataObjectTypeEAN13Code, 54 AVMetadataObjectTypeEAN8Code, 55 AVMetadataObjectTypeCode93Code, 56 AVMetadataObjectTypeCode128Code, 57 AVMetadataObjectTypePDF417Code, 58 AVMetadataObjectTypeQRCode, 59 AVMetadataObjectTypeAztecCode 60 ] 61 62 //複数のバーコードの同時取得も可能 63 for metadata in metadataObjects { 64 for barcodeType in barCodeTypes { 65 if metadata.type == barcodeType { 66 barCodeObject = self.prevlayer.transformedMetadataObjectForMetadataObject(metadata as! AVMetadataMachineReadableCodeObject) 67 highlightViewRect = barCodeObject.bounds 68 detectionString = (metadata as! AVMetadataMachineReadableCodeObject).stringValue 69 self.session.stopRunning() 70 break 71 } 72 } 73 } 74 print(detectionString) 75 self.prevlayer.frame = highlightViewRect 76 self.view.bringSubviewToFront(self.hview) 77 } 78}

投稿2016/07/20 11:12

編集2016/07/22 03:15
_Kentarou

総合スコア8490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takhub

2016/07/21 21:57

早速のご回答本当にありがとうございます!以前は大変お世話になりました。お礼が遅くなり申し訳ありません。おかげさまで該当箇所のエラーは消えました。 ただ、実行してみると、上記スクリーンショットの通り、fatal errorがでてしまいアプリが強制終了してしまいます。こちらもググって解決法を探してみるのですが全く分からずお手上げ状態です。。。lol
_Kentarou

2016/07/22 03:17

どこがoptionalで落ちているのかこの画像からは分かりませんが、こちらで動かして確認したコードを追記しましたので、試してください。
takhub

2016/07/22 15:07

ありがとうございます!さすがです!おかげさまで問題なく動作しました^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問