22

ファイルを他のアプリに送信するために UIDocumentInteractionController を実装しました。ファイルは .txt ファイルです。

コードは次のとおりです。

UIDocumentInteractionController *interactionController = [[UIDocumentInteractionController alloc] init];
[interactionController setURL:[NSURL fileURLWithPath:filePath]];
[interactionController setUTI:@"public.text"];
[interactionController setDelegate:self];
[interactionController presentOpenInMenuFromBarButtonItem:actionBarButtonItem animated:YES];

メニューは正常に開き、Pages や Dropbox などのアプリが期待どおりに表示されます。しかし、それらの 1 つをタップすると、[開く] メニューが閉じられ、アクションは実行されません (ファイルは送信されず、ターゲット アプリケーションは開きません。

オプションメニューを使用してデリゲートメソッドdocumentInteractionController:canPerformAction:を実装し、 documentInteractionController:performAction:copy: および print: 呼び出しをトリガーしようとしました (メニューで開くのではなく)。

これはどのように解決できますか?

4

3 に答える 3

51

答えが見つかりました。それはメモリ管理です。UIDocumentInteractionController を作成してから提示しますが、インスタンス変数として持っていません。ARC は、何かを行う機会を得る前に割り当てを解除します。これには、外部アプリへのドキュメントの送信が含まれます。

このバグは iPhone では発生しませんでしたが、iPad ではポップオーバー アーキテクチャの動作が少し異なり、割り当てが解除されたときに描画しようとするため、エラーが発生します。それが私にバグを警告したものです。

于 2011-11-12T04:47:36.413 に答える
16

このバグは iPhone/iPod でも発生します。設定するだけです:

@property (nonatomic, retain) UIDocumentInteractionController *docController;

それは保持され、ドキュメントは新しいアプリケーションに渡されます。

于 2013-02-07T15:17:21.793 に答える
-4

次のコードを追加するだけで十分です。

[interactionController retain];
于 2013-01-30T13:17:16.400 に答える