2

申し訳ありませんが、私は iOS モバイル開発が初めてなので、Cocoa の初心者です.. 正直に言うと、Cocoa で GCD メソッドを使用してデータを tableview に割り当てましたが、起動しても機能し[tableview reloadData]ません。ここに私のサンプルコード:

-(void)updateCell{
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(queue, ^{
         NSIndexPath* indexPath;
        // Insert code to be executed on another thread here
        if(clean_data){
            for (int i=0; i<clean_data.count; i++) {
                indexPath= [NSIndexPath indexPathForRow:i inSection:0];
                sqCell *cell = (sqCell *)[stockQ cellForRowAtIndexPath:indexPath];
                for (int j=0; j<plist.count; j++) {
                    NSString *a =[[clean_data objectAtIndex:i]objectAtIndex:1];
                    NSString *b =[[[plist objectAtIndex:j]objectForKey:@"data"]objectAtIndex:0];
                    if([a isEqualToString:b]){

                        cell.last.text =[[clean_data objectAtIndex:i]objectAtIndex:1];
                        cell.change.text = @"1231231312312";

                    }

                }
            }
        }
        dispatch_async(dispatch_get_main_queue(), ^{
            // Insert code to be executed on the main thread here
            ///reload table here
            [self reload];

        });
    });

}

データをリロードする here メソッド

   -(void)reload{
    NSLog(@"reload");
    [stockQ setNeedsLayout];
    [stockQ setNeedsDisplay];
    [stockQ reloadData];

}

コンソールに「リロード」テキストが表示されますが、stockQ UITableCIew が起動しません。私のコードではどうなりますか?

4

1 に答える 1

0

非同期スレッドで UI 処理コードを実行しません。UI の変更 (tableView の更新など) -常にメイン スレッドで行う必要があります。そのコードを非同期タスクからプルして、機能するかどうかを確認してください。別の意見 - 非同期タスクでデータをリロードする必要があるのはなぜですか? テーブル ビューは非常に軽量で高速です。投稿からのすべてのコードは、ミリ秒以内に実行する必要があります。dispatch_async は、実行時間の長い、時間のかかるタスクにのみ使用してください。

于 2013-10-02T07:50:08.497 に答える