2009-06-25 7 views
1

私はiPhone開発の新人ですが、初めてのアプリ(私が走っているウェブサイトに関連しています)をリリースすることに近いです。アプリケーションには非常に大きなデータベースが必要です。そのため、最も一般的に使用されるデータのみをローカルに保存することに決めました。私のウェブサイトのデータベースからJSON Webサービスコールを介して他のデータを取得しています。iPhoneアプリ内でスリープを使用する(特にUINavigationControllerで)

シミュレータを使用してOKを実行している間(ライブDBを叩く)、ウェブサービスコールに頼っている検索は、電話で実行したときに望んでいたよりも長くかかっていました。これらの呼び出しは、瞬間的なネイティブ検索と比べて非常に悪く見えます。相対的な差を減らすために、私はネイティブ検索のための偽のインタースティシャル(アクティビティインジケータ付きのページ)に入れたいと思っていましたが(ウェブサービスの検索では既に1つ使用しています)、ナビゲーションコントローラのタイミングに問題がありました睡眠(n)。

とにかく、私のアプリの検索セクションはtabControllerタブのnavControllerです。私は睡眠がのViewControllerをプッシュすると、その後アプリが2秒を待つために、私が欲しい効果があるときに実行する前に終了するのをプッシュが常に待機していることを見つける

[[tabBarController.viewControllers objectAtIndex:0] pushViewController:(UIViewController *)waitingController animated:YES]; 
sleep(2);

:このようなコードを使用しようとすると検索プロセスのシミュレーションを継続します。

navControllerプッシュで他の奇妙な結果が出てきましたが、私はインタースティシャルとしてプッシュしたものが内容別に残っているときに2つの別々のビューコントローラーが混乱しているように感じました。私はそれの場所が残ってプッシュしたいだけのタイトル。

私は、私が責任を負うことについての基本的な理解が欠けていると確信しています。私はここで少しの指針を期待しています。

乾杯、

アラン。

答えて

3

sleep(float)は、UIがフリーズする原因となるメインスレッドをブロックします。ない優れたユーザーエクスペリエンス - 私はあなたのアーキテクチャを変更すると、メインスレッド上で寝ていない時になり

[label performSelector:@selector(setText:) withObject:@"Delayed Hello World!" afterDelay:2.0f]; 
+0

ありがとうございます!これは完全に機能しました。ネイティブ検索からデータを取得した後、私はwaitController(インタースティシャル)をプッシュし、結果をロードするappDelegateのメソッドを呼び出すときにperformSelectorを遅延で使用します。 – alan

0

:あなたは代わりに-[NSObject performSelector:withObject:afterDelay:]

例を使用して、後に実行されるいくつかのアクションをスケジュールする必要があります!

NSOperationを使用して、Webサービスとのやりとりを制御します。これにより、操作をキューに入れ、特定のシーケンスまたは並列で実行させることができます。

NSOperationは、強力なスレッド操作を提供するための非常に簡単な方法です。途中でやりたい更新があれば、メインスレッドにコールバックすることもできます。

このアーキテクチャは、ユーザーインターフェイスをより良くするのに役立ちますが、操作を使用するように考え直すと、他にも多くの利点があります。

NB:NSOperationとNSOperationQueueを実際に手に入れるには数回かかりましたが、投資した時は間違いありませんでした。

+0

ありがとうございます。私はNSOperationを見ていきます。この場合、Webサービスコールの処理は問題ではありません。ネイティブ検索を実行するときにインタースティシャルページを持つというWebサービスコールの効果を再現しようとしています。乾杯。 – alan

+0

私はまだあなたがメインスレッドで寝るべきではないと思っています。これはあなたの問題の原因かもしれません。おそらくNSOperationを使用してユーザーインターフェイスの変更のタイミングを管理します。次のことをするためのUIへのメッセージ - 私はそれがメインスレッドで眠るよりも良いと思う。 – Grouchal

+0

私は上記のようにperformSelectorを使用していますが、スレッドをスリープ状態にするのではなく、単にアクションを遅らせると仮定していますが、私は確かに同意します。 (そして、はい、NSOperation私を恐れる;)乾杯。 – alan

関連する問題