0

大家好,我有一个 UITableView,可以从 NSMutableArray 加载预先计算的单元格。我想使用 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];

...?

一团糟。为什么你有两个电话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 回答