0

ドキュメントによると[UIActivityItemProvider item]、セカンダリスレッドで実行されます。itemこれは、UI をロックしないという点では優れていますが、メール作成画面などで が表示されるまでに必ずしも完了するとは限らないことがわかりました。

NSURL を返すために、UIImage を生成し、これをディスクに保存しています。実行時間の長いイメージ生成タスクでは、ユーザーに表示されるまでには不完全です。メインスレッドに強制しようとしましたが、それでも発生します。

itemが完全であることを確認するにはどうすればよいですか?

4

1 に答える 1

1

これは、ブール値を使用して、ファイルの構築が完了するまでアイテムの戻りを保持することで実行できます。進行状況を表示したり、メイン ビューにアクティビティ インジケーターを表示したりしたい場合は、メイン スレッドから呼び出してこれを行うことができます。以下は、実際のコード スニペットです。

進行状況ビューをロードするには、この関数を使用してプロバイダーでアクティビティ ビュー コントローラーを設定します。

self.parentViewController = parentVc;

これは、ブロッキングとフィードバックのビュー ロードを備えたアイテム関数です。

self.wait = true;

[self prepareFile:^(){
    [self performSelectorOnMainThread:@selector(dismissProgressView) 
                                  withObject:nil waitUntilDone:NO];
}];

[self performSelectorOnMainThread:@selector(loadProgressView) 
                                  withObject:nil waitUntilDone:NO];

while (self.wait) {
    [self performSelectorOnMainThread:@selector(updateProgressView) 
                                         withObject:nil waitUntilDone:NO];
}

return self.completedUrl;

その後、進行状況ビューを表示するためにメイン スレッドで呼び出される 3 つの関数を作成し、ファイルの完了を待っている間に進行状況ビューを更新できます。disconnectProgressView 関数の実装では、dismissViewController が完了したときに待機ブール値を false に設定してください。

于 2013-03-29T02:51:12.223 に答える