我已经尝试过所有方法,比如在主线程等中运行.... 但他们都没有工作.. 我的表有超过500行,其中包含图像音频和文本.. 每次重新加载表至少需要5到10秒的时间,而ui正在冻结。 请帮帮我...
答案 0 :(得分:1)
你可以使用NSOperational Queue:
NSOperationQueue *que = [[NSOperationQueue alloc]init];
[que addOperationWithBlock:^{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
//u can assign all the table view values and content here
// it will not pause the data u can scroll immediately
}];
}];
解决方案2:
调用你的数据:
dispatch_async(dispatch_get_main_queue(), ^{
//call ur data methods or web services methods in side this block
});
在表格视图中分配数据:
NSOperationQueue *que = [[NSOperationQueue alloc]init];
[que addOperationWithBlock:^{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
//u can assign all the table view values and content here
// it will not pause the data u can scroll immediately
}];
}];
答案 1 :(得分:0)
你需要使用GCD:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),
// do backgroud work
^{
dispatch_async(dispatch_get_main_queue(), ^{
// do UI work like
// label.text = ""
// or many others
});
});
答案 2 :(得分:0)
除了@KKRocks答案之外,在大多数情况下,不需要填充所有500行的表格,只能填充50并在滚动到底部时动态添加单元格。
答案 3 :(得分:0)
认为你正在使用
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
用于细胞创建和数据设置的数据源方法。我的建议是仅使用数据源方法来创建单元格。然后使用
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
委托设置数据的方法。使用此示例代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
MyWishListTableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:@"Order_Cell_Indntifire"
forIndexPath:indexPath];
return cell;
}
}
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([cell isKindOfClass:[MyWishListTableViewCell class]])
{
MyWishListModel* data = [_myWishListArray objectAtIndex:indexPath.row];
MyWishListTableViewCell *cell1 = (MyWishListTableViewCell*)cell;
[cell1 setUpData:data];
}
}