12

UIDocumentInteractionController OpenIn Menuを使用して、自分のアプリで生成された画像を他のアプリに送信しようとしています。このコードでUIImageをディスクに保存しています:

    fileJpeg = [NSTemporaryDirectory() stringByAppendingPathComponent:@"activeImage.jpg"];
    jpegFileURL = [NSURL fileURLWithPath:fileJpeg];

    UIImage *imageToWrite = image;

    [UIImageJPEGRepresentation(imageToWrite, 1.0) writeToFile:fileJpeg atomically:YES];

別の方法でjpegFileURLにアクセスして、MFMailComposeViewControllerを使用して画像を電子メールで送信していますが、完全に機能するため、NSURLは有効です。しかし、画像を別のアプリに送信しようとすると(送信するだけで、プレビュー機能を実装していません)、アプリがクラッシュします。方法は次のとおりです。

- (IBAction)openInOtherApp:(id)sender{

UIDocumentInteractionController *controller = [UIDocumentInteractionController interactionControllerWithURL: jpegFileURL];
controller.delegate = self;
CGRect rect = self.view.frame;
[controller presentOpenInMenuFromRect:rect inView:self.view animated:YES];
}

[開く]メニューが表示されます。利用可能なアプリのボタンをタップするとクラッシュします。iOS6(6.0.1)およびiOS5(5.1.1)デバイスでテストすると、コンソールにエラー出力が表示されません(通常のEXC_BAD_ACCESS(コード= 1、アドレス...クラッシュ)が、iOS 4.3デバイス(アプリは4.3以上の互換性があります)コンソールでこのエラーが発生します:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFType actionSheet:clickedButtonAtIndex:]: unrecognized selector sent to instance 0x16b7f0'

私はクラス@interfaceに実装しているUIDocumentInteractionControllerとUIDocumentInteractionControllerDelegateに関するAppleのドキュメントを読んでいますが、オプションのデリゲートメソッドはどれも私のニーズに必要ではなく、このクラッシュに役立つようです。

何が間違っているのか、何が欠けているのか理解できません。どんな助けでもいただければ幸いです。

4

3 に答える 3

35

この答えのおかげで、問題が見つかりました。思い出に残るものでした。UIDocumentInteractionControllerをローカルインスタンス変数として使用していましたが、ARCはまもなくリリースしました。それをクラスプロパティに変えて、今ではすべてが機能します。

于 2012-11-15T21:40:22.043 に答える
2

@interfaceの後に.hファイルでUIDocumentInteractionController*controllerを定義する必要があります...

@interface sampleView <UIDocumentInteractionControllerDelegate>
{
    UIDocumentInteractionController *controller;
}

アプリケーションは、呼び出し元のプロシージャだけでなく、モジュール全体からこの変数にアクセスできる必要があります。

于 2015-05-11T13:37:20.293 に答える
0

リモートPDFURLを使用すると、アプリがクラッシュすることに注意してください。リモートURLをローカルディレクトリパスに保存します。そして、そのURLをドキュメントインタラクションコントローラーにポイントします。ここでローカルディレクトリに保存する際のSwiftコード例。

let data = try Data(contentsOf: self.pdfUrl)
// Create a local file url path with intermediate folders created.     
let fileUrl = Utils.cachesDirectoryPath(appendingComp: self.filePath, ext: "pdf")
try data.write(to: fileUrl)
// Provide this URL into DocumentInteractionController
self.fileUrl = fileUrl
于 2020-01-24T02:25:00.210 に答える