Swiftが熱いですね!
Objective-Cなんてもう忘れ去れるくらい最近Swiftしか書いてないです。
ということで、Swiftを使ってちょっとハマった事をメモ。
外部アプリにファイル転送
外部アプリにファイルを転送するときに便利なものに、UIDocumentInteractionControllerがあります。よく見る、Open In...ってやつですね。これを普通に使うと
@IBAction func showOpenIn(sender: AnyObject) { if let url = NSBundle.mainBundle().URLForResource("pdf_name", withExtension: "pdf") { let dic = UIDocumentInteractionController(URL: url) dic.delegate = self dic.presentOpenInMenuFromBarButtonItem(openInButton, animated: true) } }
このようなコードになると思います。
しかし、このまま実行すると、iBooksを選択することまではできるのですが、選択した後落ちてしまいました。
ちなみに、シミュレーターだとUIDocumentInteractionControllerがうまく動かないため、実機で実行する必要があります。
こうすればOK
上記のコードで落ちてしまう原因は、関数が終了した段階でGCがdicのインスタンスを開放してしまうことが原因のようです。そのため、今回はクラスのインスタンス変数にインスタンスを保持する事で解決しました。コードにすると以下のようになります。
var dic:UIDocumentInteractionController? @IBAction func showOpenIn(sender: AnyObject) { if let url = NSBundle.mainBundle().URLForResource("pdf_name", withExtension: "pdf") { dic = UIDocumentInteractionController(URL: url) dic?.delegate = self dic?.presentOpenInMenuFromBarButtonItem(openInButton, animated: true) } }