iOS 6 アプリの簡単なワークフローがあります。
UINavigationController -> loadingVC -(push)-> UITabBarController -> UIViewController(s)
を介してプッシュを呼び出し、performSegueWithIdentifier:
オブザーバーを使用してそれ自体を呼び出しましたNSNotificationCenter
が、UITabBarController のルート VC のロードに時間がかかりすぎます (約 35 秒)。
ローディングVCにオブザーバーを登録する方法は次のとおりです。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadingDidComplete) name:@"dataDoneLoading" object:nil];
次に、loadingVC は AppDelegate からいくつかのメソッドを呼び出します。このメソッドは、いくつかのネットワーク処理 (XML ファイルのフェッチと解析) に進み、トリガーされる通知を待ちます:
[self performSegueWithIdentifier:@"finishedLoading" sender:self];
のルート VC のロード時に取得したコンソール ログは次のUITabBarController
とおりです。
2013-05-06 16:28:19.720 *** [2289:19303] Notif sent
2013-05-06 16:28:19.720 *** [2289:19303] Notif received
2013-05-06 16:28:19.727 *** [2289:19303] viewDidLoad in (some basic stuff)
2013-05-06 16:28:19.728 *** [2289:19303] viewDidLoad out
2013-05-06 16:28:19.729 *** [2289:19303] viewWillAppear (NSLog only)
2013-05-06 16:28:54.475 *** [2289:19303] In numberOfSections (datasource method of a UITableview, returns 0)
2013-05-06 16:28:54.832 *** [2289:12b03] viewDidAppear (NSLog only)
ご覧のとおりviewWillAppear
、プッシュが実際に行われるまでに 35 秒かかります。アプリは にハングアップしloadingVC
、通常どおりプッシュします。
これはすべてシミュレーターで行われます (現時点では、物理デバイスでテストすることはできません)。
私が試したこと:
•SDSegmentedControl
のサブクラスであるを使用していますUISegmentedControl
が、後者を使用してみましたが、同じ問題が発生します。
• を削除UINavigationController
し、プッシュをモーダル セグエに置き換えました。それはより速く動作するように見えますが、UI は完全にめちゃくちゃです: セグエ中にアニメーションはありません (「はい」に設定しても)、タブバーはセグメントをタップするまでテキストやアイコンを表示しません。セグメント化されたコントロールは表示されません。
何が起こっているのか理解できないようです。助けはありますか?