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

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

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

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

Q&A

解決済

2回答

1145閲覧

UIPrinterPickerControllerを使ってpdfを印刷したい

mimamo

総合スコア44

Swift

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

0グッド

0クリップ

投稿2019/01/11 04:05

編集2019/01/11 04:07

前提・実現したいこと

UIPrinterPickerControllerを使って、アプリ内でローカル保存したpdfやあらかじめアプリ内に入っているpdfを印刷したいのですが、エラーが出てしまいます。

コードはローカル保存したpdfを印刷する用です。

発生している問題・エラーメッセージ

class AppDelegate: UIResponder, UIApplicationDelegate {

Thread 1: signal SIGABRT

該当のソースコード

pdfを作成するVC

swift

1 @IBAction func push(_ sender: Any) { 2 print("push") 3 4 5 let pdfData = NSMutableData() 6 UIGraphicsBeginPDFContextToData(pdfData, self.view.bounds, nil) 7 UIGraphicsBeginPDFPage() 8 9 guard let pdfContext = UIGraphicsGetCurrentContext() else { return } 10 self.view.layer.render(in: pdfContext) 11 UIGraphicsEndPDFContext() 12 13 if let documentDirectories = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first { 14 let documentsFileName = documentDirectories + "/test.pdf" 15 UserDefaults.standard.set(documentsFileName, forKey:"filePath") 16 debugPrint(documentsFileName) 17 pdfData.write(toFile: documentsFileName, atomically: true) 18 } 19 20 } 21

UIPrinterPickerControllerを使いたいVC

swift

1import UIKit 2 3 4class PhotoT: UIViewController { 5 6 @IBAction func startPrint(_ sender: UIButton) { 7 self.showPrinterPicker() 8 } 9 10 11 func showPrinterPicker() { 12 // UIPrinterPickerControllerのインスタンス化 13 let printerPicker = UIPrinterPickerController(initiallySelectedPrinter: nil) 14 15 // UIPrinterPickerControllerをモーダル表示する 16 printerPicker.present(animated: true, completionHandler: 17 { 18 [unowned self] printerPickerController, userDidSelect, error in 19 if (error != nil) { 20 // エラー 21 print("Error : (String(describing: error))") 22 } else { 23 // 選択したUIPrinterを取得する 24 if let printer: UIPrinter = printerPickerController.selectedPrinter { 25 print("Printer's URL : (printer.url)") 26 self.printToPrinter(printer: printer) 27 } else { 28 print("Printer is not selected") 29 } 30 } 31 } 32 ) 33 } 34 35 func printToPrinter(printer: UIPrinter) { 36 // 読み込み 37 let filePath0 = UserDefaults.standard.string(forKey:"filePath") 38 let pdfURL = URL(fileURLWithPath: filePath0!) 39 40 41 // 印刷してみる 42 let printIntaractionController = UIPrintInteractionController.shared 43 let info = UIPrintInfo(dictionary: nil) 44 info.jobName = "Sample Print" 45 info.orientation = .portrait 46 printIntaractionController.printInfo = info 47 //印刷する内容 48 printIntaractionController.printingItem = pdfURL 49 printIntaractionController.print(to: printer, completionHandler: { 50 controller, completed, error in 51 }) 52 } 53 54 override func viewDidLoad() { 55 super.viewDidLoad() 56 // Do any additional setup after loading the view, typically from a nib. 57 58 } 59 60 61 override func didReceiveMemoryWarning() { 62 super.didReceiveMemoryWarning() 63 // Dispose of any resources that can be recreated. 64 } 65 66}

補足情報(FW/ツールのバージョンなど)

参考資料

Swiftのversionは4.1.2
Xcodeのversionは9.4.1

プリンターの実機がないのでPrinter Simulatorをダウンロードしました。イメージ説明

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

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

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

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

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

takabosoft

2019/01/11 04:15

出力ペインに何かエラー他に出力されていませんか?
mimamo

2019/01/11 04:19

無知ですみません。出力ペインってコンソールとは別のものですか?
takabosoft

2019/01/11 04:22

xcode上でいうところの下(または右下)の方ですね。コンソールと呼んで良いのかはわかりませんが。。
takabosoft

2019/01/11 04:23

Thread 1: signal SIGABRT が出ると、大抵そこに何かしらのエラーの要因が出力されていることがおおいです。
fuzzball

2019/01/11 04:26

>>takabosoftさん Console(コンソール)でいいですよ。XcodeにConsoleって書いてるので‥。
mimamo

2019/01/11 04:33

エラーらしきエラーを見つけることができなかったので、少し長くなりますがこちらに載せさせていただきます。 PhotoTweaksはcocoapodsなんですけど使ってないです。 2019-01-11 13:16:06.133235+0900 challenge[43603:3813223] Unknown class _TtC11PhotoTweaks6PhotoT in Interface Builder file. 2019-01-11 13:16:09.876152+0900 challenge[43603:3813223] -[UIViewController startPrint:]: unrecognized selector sent to instance 0x7fca83e87ee0 2019-01-11 13:16:09.882828+0900 challenge[43603:3813223] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController startPrint:]: unrecognized selector sent to instance 0x7fca83e87ee0' *** First throw call stack: ( 0 CoreFoundation 0x0000000110d801e6 __exceptionPreprocess + 294 1 libobjc.A.dylib 0x0000000110415031 objc_exception_throw + 48 、、、以下続く、、、 23 libdyld.dylib 0x00000001153c4955 start + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)
takabosoft

2019/01/11 04:43

fuzzballさん、ありがとうございます(あれコンソールだったんですか・・・)
guest

回答2

0

ベストアンサー

reason: '-[UIViewController startPrint:]: unrecognized selector sent to instance 0x7fca83e87ee0'

StoryboardのCustom ClassPhotoTクラスを設定していないのではないでしょうか?

投稿2019/01/11 04:44

fuzzball

総合スコア16731

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

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

mimamo

2019/01/11 05:27

ClassはPhotoTになっていたのですが、moduleが別の名前になっていたのが原因だったようです。 ありがとうございます!
guest

0

例外が出てますね、

text:

12019-01-11 13:16:09.876152+0900 challenge[43603:3813223] -[UIViewController startPrint:]: unrecognized selector sent to instance 0x7fca83e87ee0 22019-01-11 13:16:09.882828+0900 challenge[43603:3813223] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController startPrint:]: unrecognized selector sent to instance 0x7fca83e87ee0'

以下にブレークポイントを張ってもらえますか?
おそらく実行時にボタンを押しても、ここに到達できていないと思います。

swift

1 @IBAction func startPrint(_ sender: UIButton) { 2 self.showPrinterPicker() ←★ここにブレークポイント 3 }

Storyboard上のボタンのイベントがちゃんと紐付いているか確認してください。

投稿2019/01/11 04:40

takabosoft

総合スコア8356

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

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

mimamo

2019/01/11 05:27

ボタンは紐付いていたのですが、Custom Classが正しくリンクされていなかったのが原因だったみたいです。 エラーが出るとき、コンソールの部分はなにを書いているのかわからなかったのですがいろいろ教えてくれていたのですね。勉強になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問