1

アプリにMFMessageComposeViewControllerがあり、受信者数が最大200程度になることがあります。4Sでテストする場合、ボタンをクリックしてからSMSビューをロードするのに最大10秒(!!)かかります。古いデバイスではさらに長くなる可能性があると思います。

これは明らかに、読み込みビューがないブロッキング呼び出しには長すぎますが、ビューが実際に読み込まれるときにコールバックがない場合、読み込みビューを表示できません。MFMessageComposeViewControllerDelegateプロトコルにはコールバックが1つしかありませんが、それはSMSビューが閉じられた後でのみコールバックし、ロードされたときではありません。何か案は?

モーダルビューのロードロジックのどこかからコールバックを取得するか、最後の手段として5〜10秒のロード画面を配置して、それまでに起動することを期待しています。

4

2 に答える 2

2

MFMessageComposeViewControllerは、UINavigationControllerのサブクラスです。UINavigationControllerDelegateのメソッドのいずれかを実装してみましたか。具体的には:

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated;
于 2013-03-06T19:32:32.800 に答える
0

さらに掘り下げてみると、古いバージョンのUIViewController presentViewController:animated:completion:を使用していたため、「完了」部分が実装されていなかったことがわかりました。これは、完了ブロックで読み込みビューを閉じるだけの目的には間違いなく最適なオプションですが、iOS5.0以降でのみ機能します。5.0未満をサポートする必要がある場合は、Edwinの回答が役立つかもしれません。

更新:上記の方法を使用しても、実際には機能しませんでした。プログレスビューをスローしてからを呼び出しpresentViewController:animated:completion:MFMessageComposeViewController場合でも、プログレスビューが表示される前にブロッキング呼び出しが行われます。ブロッキング呼び出しが開始される前に実行ループが完了しなかったため、UIの変更が発生しないことが関係していると思います。

代わりに、進行状況ビューに実際に表示されたときにコールバックを作成させ、コールバックでの読み込みを開始しましたMFMessageComposeViewController。次に、MFMessageComposeViewControllerコールバックが発生したときに、進行状況ビューとを閉じますMFMessageComposeViewController。成功!

于 2013-03-06T20:15:58.093 に答える