質問

セルのアクセサリボタンを押すとデータがロードされたら、セルが表示されるときにアプリケーションにデータをロードしようとしています。

私の問題は私がAFNETSWORKINGを使用していることであり、このブロックコードを使用しています。

[Request fullRequestWithBlock:^(NSArray *detailedReqFromWeb, NSError *error) {
        if (error) {

            [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Error", nil) message:[error localizedDescription] delegate:nil cancelButtonTitle:nil otherButtonTitles:NSLocalizedString(@"OK", nil), nil] show];
        } else {

            NSArray *objs = [NSArray arrayWithObjects: [detailedReqFromWeb objectAtIndex: 0], [detailedReqFromWeb objectAtIndex: 1], [detailedReqFromWeb objectAtIndex: 2], [detailedReqFromWeb objectAtIndex: 3], [detailedReqFromWeb objectAtIndex: 4], [detailedReqFromWeb objectAtIndex: 5], nil];
            NSArray *keys = [NSArray arrayWithObjects:@"Risk", @"Destination", @"Source", @"Customer", @"Subcategory", @"Deployment", nil];

            NSMutableDictionary *detailsforRequestDictionary = [[NSMutableDictionary alloc] initWithObjects:objs forKeys:keys];

            [request addEntriesFromDictionary: detailsforRequestDictionary];

            NSLog(@"%@ Finished Loading", [idNumbers objectAtIndex:row]);
            cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;

        }

    } forID: [[idNumbers objectAtIndex:row] substringFromIndex:1]];
.

基本的に、データがロードされると、インジケータから開示ボタンにアクセサリの種類を変更しようとしています。

問題は、ロードが完了する前にCell.AccessoryTypeをボタンに変更していることです。デバッグNSLOGは実際にロードを終了すると実際に出力されます。

ロードが完了したらボタンを有効にするための最良の方法は何ですか?私は要求がメインスレッドによって処理されていないと思います。要求が処理を終了したことをどのように通知して、AccessoryTypesを切り替えることができますか?

ありがとう!

役に立ちましたか?

解決

セルをリサイクルしない限り、それが表すデータがユーザーがスクロールするにつれて変わるデータとして、セル参照を残さないでください。正しい方法は、セクション/行座標のテーブルエントリを更新するメインキュー上のブロックをディスパッチすることです。その後、そのセルが表示されているかどうかを確認してから更新します。テーブルが適切な状態をスクロールすると適切なステータスが適用されるように、他の方法でステータスを記録します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top