테이블 뷰에 사전 배열을로드하고 테이블을 다시로드 한 다음 배열에서 사전 데이터를 변경 한 다음 테이블 뷰의 특정 인덱스를 새로 고침/다시로드하는 메소드를 호출했습니다. 하지만 내 전체 데이터가 다시 업데이트되지 않는 한 내 테이블을 스크롤 할 수 없습니다. 내 테이블 데이터를 업데이트하는 것을 시도하고있는iOS에서 테이블을 스크롤 할 수 없습니다
- (void)parserDidEndDocument:(NSXMLParser *)parser {
[Hud hideAnimated:true];
[self.myTbl reloadData];
dispatch_async(dispatch_get_main_queue(),^{
[self loadTutorials];
});
}
방법 : 내 메서드를 호출하고 테이블을 다시로드 곳에서
는코드입니다.
#pragma mark:GetAllData
-(void)loadTutorials{
dispatch_async(dispatch_get_main_queue(),^{
int k = 0;
for (NSMutableString*linknew in linkArr) {
//here some calculations code for parsing then next
for (TFHppleElement *elements in contributorsNodes) {
// 5
for (TFHppleElement *child in elements.children) {
if ([child.tagName isEqualToString:@"img"]) {
// 7
@try {
NSString*url = [child.attributes objectForKey:@"src"];
NSMutableDictionary*dict = [[feeds objectAtIndex:k] mutableCopy];
[dict setObject:url forKey:@"image"];
[feeds removeObjectAtIndex:k];
[feeds insertObject:dict atIndex:k];
NSIndexPath*index = [NSIndexPath indexPathForRow:k inSection:0];
[self.myTbl reloadRowsAtIndexPaths:@[index] withRowAnimation:UITableViewRowAnimationNone];
}
@catch (NSException *e) {}
}
}
}k++;
}
});
}
cellForRowAtIndexPath 방법 :
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
UILabel*lbl = (UILabel*)[cell viewWithTag:101];
UIImageView*imgView = (UIImageView*)[cell viewWithTag:103];
[imgView sd_setImageWithURL:[NSURL URLWithString:[[feeds objectAtIndex:indexPath.row] objectForKey:@"image"]] placeholderImage:[UIImage imageNamed:@"img.jpg"]];
lbl.text = [NSString stringWithFormat:@"%@",[[feeds objectAtIndex:indexPath.row] objectForKey: @"title"]];
return cell;
}
데이터 처리에 오랜 시간이 걸리기 때문에'disptch_async'라고 가정합니다. 그렇다면이 작업을 기본 대기열로 보내려면 이해가되지 않습니다. 그럼에도 불구하고 주 스레드를 차단할 것입니다. 백그라운드 대기열에 작업을 보내고 UI 업데이트와 관련된 부분을 기본 대기열로 보내야합니다. – Losiowaty
@ Losiowaty 답장을 보내 주셔서 감사합니다. 나는 방법을 넣는다 [self.myTbl reloadRowsAtIndexPaths : @ [index] withRowAnimation : UITableViewRowAnimationNone]; disptch_async 내 메서드의 시작에서 disptch_async 제거하지만 여전히 동일한 문제 –