2012-10-01 4 views
0

안녕 얘들 아 NSMutableArray에서 미리 계산 된 셀을로드하는 UITableView 있습니다. 나는 부드러운 스크롤을 사용할 수 있도록 사용자 인터페이스를 업데이트 할 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

오류는 블록 반환 무효입니다 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이 아니라고 알려줍니다. 셀을 사전 계산했지만 새 셀이 uitableview에 들어올 때 스크롤링에 약간의 지연이 있습니다. 이 약간의 지연 문제를 해결하고 싶습니다. 그것을 할 수있는 방법이 있습니까? – stefanosn

+0

비동기로 셀을로드하기 때문에이 작업을 수행하려고합니다. – stefanosn

+0

@stefanosn은 tableViewCell의 반환을 단순히 상쇄하는 것이 아닙니다. 보기에 멈추는 경우 도면 또는 셀 재사용 패턴을 최적화해야합니다. 드로잉은 항상 메인 스레드에서 수행됩니다. 악기에서 실행하고 시간을 어디에서 보내고 있는지 확인하십시오. – Jessedc

0

그런 식으로 세포 검색을 오프셋하면 어떤 이점도주지 않을 것입니다. 셀을 요구하는 UITableView 인스턴스보다 먼저 셀 높이/크기/내용을 계산해야합니다.

UITableView는 주 스레드의 위임 콜백에서 UITableViewCell이 반환 될 것으로 예상하고 있습니다.

더 좋은 아이디어는 다른 스레드에 계산을 넣는 것입니다. 시간이 필요하고 완료되면 UITableView를 reloadData으로 다시 호출 할 수 있습니다.

+0

Jessedc : 답변 해 주셔서 감사합니다! – stefanosn

관련 문제