0

Cocoa TouchアプリにMainViewControllerがあり、ビューを含むステータスビューが表示されUIProgressBarます。

MainViewControllerから、FlickrImageモデルオブジェクトが作成され、繰り返されます。FlickrImageオブジェクト自体がFlickrAPIと相互作用するため、時間がかかります。そのため、ユーザーにプログレスバーを表示してもらいたいのです。課題(少なくとも私にとっては;)はprogress、オブジェクトからUIProgressBar(メッセージの送信)を操作することFlickrImageです。を使用してこれを行うのですか、それともMainViewControllerをNSNotificationCenterでフォワードクラスとして宣言FlickrImageし、UIProgressBarと直接対話することができますか?

4

2 に答える 2

2

最善の方法は、モデルに何も呼び出さないようにすることですが、KVOを使用してモデルを観察し、モデルが更新されたときに表示されるメッセージに反応します。これは、別個のモデルレイヤーを持つことのポイントは、モデルがデータがユーザーにどのように提示されるかについて何も知る必要がないということです。

したがって、すべての画像の読み込みを追跡するクラスを作成し(ほとんどの場合、すでにそのようなクラスがあります)、次のようなことを行います。

[imageManager addObserver:self forKeyPath:@"progress" options:nil context:nil];

データマネージャークラスにprogressという宣言されたプロパティ(理想的には0.0から1.0の範囲の値)があることを確認し、マネージャーで値を更新するときは、ドット表記を使用する必要があります。self.progress = newVal;

これは、モデルクラスから通知を送信するよりもはるかにクリーンです。別の方法は、ビューをマネージャーの代理人として登録することです。デリゲートプロトコルを使用する場合のオーバーヘッドはわずかに少なくなる可能性がありますが、デリゲートを使用する必要がある場合とKVOの方が優れている場合について、明確な経験則はありません。Appleは両方のアプローチを使用していますが、KVOに依存する傾向があります。これは私の意見では良いことです。

于 2009-12-17T15:22:00.600 に答える
0

UIProgressBarを監視および更新するために、NSNotificationCenter、MainViewControllerレジスタを使用することをお勧めします。

オブジェクトMainViewControllerをFlickrImageに保持し、FlickrImageからUIProgressBarを更新して、モデルからUIを処理できるようにします(MVCに違反しています)

于 2009-12-17T13:43:06.400 に答える