0

こんにちは、NSMutableArray から事前計算されたセルをロードする UITableView があります。NSOperationQueue または PerformSelectorOnMainThread を使用してユーザー インターフェイスを更新し、スムーズなスクロールを有効にしたいのですが、エラーが発生します... これは私のコードです...

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  //queue is being initialized in viewDidLoad          
  [queue addOperationWithBlock:^ {
      [[NSOperationQueue mainQueue] addOperationWithBlock:^ {
          NSLog(@"Updating...");      
          return [self.CellObjects objectAtIndex:indexPath.row];          
          //if you remove the line above with the return, NSOperationQueue will work but I need the above line to load the cell.
      }];
  }];
}

それを機能させる方法はありますか?どんな助けでも大歓迎です!

4

2 に答える 2

3

なぜシンプルではない...

return [self.CellObjects objectAtIndex:indexPath.row];

...?

それは混乱です。への呼び出しが 2 つあるのはなぜaddOperationWithBlock:ですか? また、あなたのreturnステートメントは の戻り値とは何の関係もありませんtableView:cellForRowAtIndexPath:。これはブロックの戻り値なので、決して機能しません。

あなたのエラーは何ですか?期待void(^)(void)して送信しようとしているため、互換性のないブロックポインターに関するものだと思いますUITableViewCell *(^)(void)

そこではブロックは役に立ちません。で事前に計算されたセルがある場合は、線CellObjectsのみを使用してください。return self.CellObjects[indexPath.row];

のようなプロパティ名も使用しないでくださいCellObjects。という名前にする必要がありますcellObjects。ケースを確認してください。

于 2012-10-01T13:51:13.597 に答える
0

そのようにセル取得をオフセットしても、何の利点もありません。UITableView インスタンスがセルを要求する前に、セルの高さ/サイズ/コンテンツを計算する必要があります。

UITableView は、メイン スレッドのデリゲート コールバックから UITableViewCell が返されることを期待しています。

より良いアイデアは、時間が必要な場合は他のスレッドに計算を配置し、完了時に UITableView にコールバックできるようにすることreloadDataです。

于 2012-10-01T13:54:37.877 に答える