1

MVC パラダイムをよりよく理解するために、アップロード メソッドから一部の UI コードの依存関係を削除しようとしています。

対応する NSOperation サブクラスを表示するように個々のセルを指定して、UITableView 内でアップロードの進行状況を視覚化する方法を設計したいと考えています。私の NSOperation サブクラスは、デリゲート コールバック パターン (つまり、非並行/mainThread のみ) をサポートするためにハッキングされています。NSOperation は次のようになります。

@class MyUploadOp;
@protocol MyUploadDelegate;
-(void)uploadOp:(MyUploadOp *)uploadOp madeProgress:(CGFloat)progress;
-(void)uploadOp:(MyUploadOp *)uploadOp didUploadLocalFile:(LocalFileObject *)localFile;
@end

@interface MyUploadOp : NSOperation <DBRestClientDelegate>
@property (nonatomic,strong) LocalFileObject *myLocalFile;
-(id)initWithLocalFile:(LocalFileObject *)localFile;
@end

ご覧のとおり、Dropbox SDK for iOS を使用しています。この NSOperation サブクラスは、ローカル ファイルを Dropbox にアップロードします。必要な Dropbox デリゲート メソッドを NSOperation クラス内で受け取り、アップロードの設定と追跡を担当するクラスに転送します。

私がやりたいことは、新しい UITableViewController といくつかのカスタム UITableViewCells をセットアップすることです。この部分については、助けは必要ありません、ヤッダヤッダ。私が助けを必要としているのは:

  • 設定される可能性のある NSOperations を追跡する
  • 各 NSOperation を UITableViewCell に割り当てる
  • これらのメッセージを受信するには、誰が私の NSOperation の代理人になる必要がありますか?
  • 代わりに、"progress" などのオペレーションのプロパティを設定し、KeyValue Observing を使用する必要がありますか?
  • この場合、どのオブジェクトを観察する必要がありますか? セルまたはviewController?
  • NSOperation が終了してキューから消えるとどうなるか、テーブルに値が入力されたままになるように記録を保持する必要があります。
  • デリゲート メソッドの呼び出しごとにセル内の UIProgressBars を更新する
  • NSOperation の完了時にアイテムをテーブルに保持する

私の現在のコードは現在動作していますが、まだテーブルを実装していません。これらのアイテムを追跡する最善の方法がわかりません。おそらく、Operation への参照を保持する NSObject サブクラスを作成し、それをテーブルに入力する必要があるでしょうか?

4

1 に答える 1

1

設定される可能性のある NSOperations を追跡する

操作にプロパティを追加して、識別子を設定できるようにします。次に、デリゲート メソッドが呼び出されると、識別子を読み取り、それをインデックス パスに変換できます。テーブル ビュー コントローラー クラスで、識別子の配列を保持します (配列内のインデックスは、表示される行番号です)。

各 NSOperation を UITableViewCell に割り当てる

説明したとおりです。

これらのメッセージを受信するには、誰が私の NSOperation の代理人になる必要がありますか?

テーブル ビュー コントローラー。

代わりに、"progress" などのオペレーションのプロパティを設定し、KeyValue Observing を使用する必要がありますか?

いいえ、しかし、おそらくテーブルビューコントローラーの配列に進行状況の値をキャッシュする必要があります。そのため、セルが画面外にスクロールされた場合、画面上にスクロールされたときにセルを更新できます (操作を見つけてクエリを実行する必要はありません)。 .

NSOperation が終了してキューから消えるとどうなるか、テーブルに値が入力されたままになるように記録を保持する必要があります。

配列から識別子を削除しないでください。

デリゲート メソッドの呼び出しごとにセル内の UIProgressBars を更新する

テーブル ビュー コントローラーに格納されている配列の内容を使用します。1 つは識別子用で、もう 1 つは進捗値用です。両方の配列には、常に同じ数のアイテムが含まれている必要があります。

于 2013-07-21T22:40:42.583 に答える