2012-10-01 66 views
0

嗨,大家好,我有一個UITableView從NSMutableArray加載預先計算的單元格。我想用NSOperationQueue或PerformSelectorOnMainThread更新用戶界面,以使平滑滾動,但我得到一個錯誤......這是我的代碼...用NSOperationQueue加載UITableViewCell

- (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. 
     }]; 
    }]; 
} 

有沒有一種方法,使工作?任何幫助感謝!

+0

你得到了什麼錯誤? – CRDave

+0

錯誤是塊返回void而不是UITableViewCell – stefanosn

回答

3

爲什麼不簡單......

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

...?

這是一團糟。爲什麼你有兩個電話addOperationWithBlock:?並且您的return聲明與tableView:cellForRowAtIndexPath:的返回值無關。它是你塊的返回值,所以它永遠不會工作。

你的錯誤是什麼?我認爲這是關於不兼容的塊指針,因爲它期望void(^)(void),並且您正嘗試發送UITableViewCell *(^)(void)

塊是不會幫你在那裏。如果您在CellObjects中有預先計算的單元格,只使用return self.CellObjects[indexPath.row];行。

也不要使用屬性名稱,如CellObjects。應該命名爲cellObjects。檢查案件。

+0

感謝您的回答!是的,它告訴我,返回是無效的,而不是UITableViewCell。我已經預先計算了單元格,但在新單元格進入可用視圖時,仍然存在滾動時的輕微滯後。我想解決這個輕微的滯後問題。有沒有辦法做到這一點? – stefanosn

+0

我想這樣做,因爲我想異步加載單元格... – stefanosn

+0

@stefanosn只是抵消了tableViewCell的返回不是這裏的答案。如果視圖出現拖延,那麼您需要優化繪圖或單元重用模式。繪圖將始終在主線程上完成。用儀器運行它,看看它花費的時間。 – Jessedc

0

以這種方式偏移您的細胞檢索不會給你帶來任何好處。您需要在您的UITableView實例請求單元之前計算您的單元格高度/大小/內容。

UITableView期待從主代碼 的代理回調中返回UITableViewCell。

一個更好的主意是將計算放置在其他線程上,如果他們需要時間和他們的完成,你可以調用回你的UITableView到reloadData

+0

Jessedc:謝謝你的答案! – stefanosn