• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 刷新 UITableView 的内容会卡住应用程序

[复制链接]
菜鸟教程小白 发表于 2022-12-12 23:56:36 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我在 UITableview 中刷新数据时遇到问题。目前有一个 UIRefreshControl,当触发(通过下拉)时,执行以下操作:

- (void)refreshByScrollingUIRefreshControl *)refreshControl {
    [self refreshPriceInformation];
    [refreshControl endRefreshing];
}

此时 UI 卡住(期待旋转的 refreshControl,直到 [self refreshPriceInformation] 方法完成。

有没有办法让它在我刷新数据时 UI 不会卡住?例如,在 twitter 和 Instagram 应用程序上,您可以在开始向下滚动表格后立即下拉刷新。

[self refreshPriceInformation] 的代码如下

-(void)refreshPriceInformation
{

isRefreshing = true;

//Creating Queues for Concurrent refreshes
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);


dispatch_apply([watchedSkinList count], queue, ^(size_t i) {

        SkinToWatch *watchedSkin =[watchedSkinList objectAtIndex:i];
        [watchedSkin refreshPriceInformation];

});

 dispatch_async(queue, ^{
     NSLog(@"Saving Data to Phone");

     // resaving data to phone
     NSData *newdata = [NSKeyedArchiver archivedDataWithRootObject:watchedSkinList];
     [[NSUserDefaults standardUserDefaults] setObject:newdata forKey"watchSkinsArray"];
     [[NSUserDefaults standardUserDefaults]synchronize ];


    isRefreshing = false;
     [self.tableView performSelectorOnMainThreadselector(reloadData) withObject:nil waitUntilDone:YES];

     //Updating Refresh Label
     [self updateDateAndSaveDurning:false];

 });



}

谢谢!

编辑****** 正如 HackerInHeels 下面所说,用 DISPATCH_QUEUE_PRIORITY_BACKGROUND 包装 dispatch_apply 已经阻止了 UI 卡住!

跟进问题: 1)如何确保这是最后执行的代码块?

dispatch_async(queue, ^{
         NSLog(@"Saving Data to Phone");

//rest of code...
});

在实现解决方案之前,它是执行的最后一个 block 。解决之后,就不是这样了。我是否将其放入另一个队列?让它同步而不是aysnc?

再次感谢!



Best Answer-推荐答案


你能帮我试试这个吗..

在 dispatch_async 中包装 SkinToWatch 代码

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
    dispatch_apply([watchedSkinList count], queue, ^(size_t i) {

    SkinToWatch *watchedSkin =[watchedSkinList objectAtIndex:i];
    [watchedSkin refreshPriceInformation];

    });
});

关于ios - 刷新 UITableView 的内容会卡住应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24814700/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap