在后台重新加载 UITableView 的数据

2024-03-20

在我的应用程序中,我有一个 UITableViewController。

它的 tableView 分为 3 个部分。

我从我的服务器下载每个部分的数据。为此,我有 3 个函数(例如 f1 f2 和 f3)。每个更新一个相应的 NSArray,用作我的表的数据源。

现在我想要的是使用此函数重新加载数据,并在这 3 个函数完成后刷新我的 tableView,但不会打扰用户。

我不使用异步请求、块、线程等......并且我正在寻找提示。

实际上,这就是我所做的:

-(void)viewDidLoad
{
    //some settings

    [NSTimer scheduledTimerWithTimeInterval:15.0 target:self selector:@selector(reloadDatas) userInfo:nil repeats:YES];

    dispatch_queue_t queue = dispatch_get_main_queue();
    dispatch_async(queue, ^{
        [self reloadDatas];
    });
}

-(void)reloadDatas
{
    dispatch_queue_t concurrentQueue = dispatch_get_main_queue();
    dispatch_async(concurrentQueue, ^{
        [self f1];
        [self f2];
        [self f3];
        [myDisplayedTable reloadData];
    });
}

-(void)f1
{
    //load datas with a url request and update array1
}
-(void)f2
{
    //load datas with a url request and update array2
}
-(void)f3
{
    //load datas with a url request and update array3
}

但在这里,我的 tableView 被“冻结”,直到刷新。

我不关心f1 f2和f3的执行顺序,但我需要等待这3个函数完成后再刷新我的tableView。

感谢您的帮助。

EDIT

感谢您的所有回答。

这是工作解决方案:

正如 mros 所建议的,我从 viewDidLoad 中删除了调度队列,并替换为 reloadDatas:

dispatch_queue_t concurrentQueue = dispatch_get_main_queue();

with

dispatch_queue_t mainThreadQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

最后,我在主线程中重新加载表

dispatch_async(dispatch_get_main_queue(), ^{ [myDisplayedTable reloadData]; });

所以你的“后台线程”实际上是你的主线程。您必须使用dispatch_get_global_queue并指定优先级才能实际获取不同的线程。此外,viewDidLoad 中的调度异步是无用的,因为所有视图控制器生命周期方法都在主线程中调用。我建议在 f1、f2 和 f3 方法中执行以下操作:

首先启动异步 URL 请求,然后在完成块中更新 arrayX 并重新加载表视图的特定部分。这样,所有三个请求可以同时发生,并且表仅在每个请求完成时更新必要的数据。或者,如果您只想重新加载一次,只需将您拥有的并发队列变量替换为后台线程,然后执行[tableView reloadData]在主线程上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在后台重新加载 UITableView 的数据 的相关文章

  • 我如何从 iPhone 设备获取电子邮件历史记录..?

    friends 我想从我的 iPhone 访问电子邮件历史记录 并且还希望在收到新邮件时收到通知 如果可能的话 请向我提供源代码片段 Thanks 简而言之 使用任何已记录的 API 都是不可能的
  • UITextView:内存使用量巨大

    我在 UITextView 中遇到了内存使用过多的问题 我正在将 50Kb ascii 文本文件加载到 NSString 中 并将其分配给应用程序中空 UITextView 组件的 text 属性 这立即使我的内存占用量增加了 100Mb
  • 将捕获的图像精确裁剪为 AVCaptureVideoPreviewLayer 中的外观

    我有一个使用 AV Foundation 的照片应用程序 我使用 AVCaptureVideoPreviewLayer 设置了一个预览层 它占据了屏幕的上半部分 因此 当用户尝试拍照时 他们只能看到屏幕上半部分看到的内容 这很好用 但是当用
  • 由于 2.23 导致 iOS 应用程序被拒绝 - iOS 数据存储指南

    以下是 Apple 关于拒绝的消息 2 23 应用程序必须遵循 iOS 数据存储指南 否则将被拒绝 2 23 详情 在启动和内容下载时 您的应用程序会存储 6 5 MB 这并不意味着 遵守 iOS 数据存储指南 下一步 请验证只有用户使用您
  • iOS 使用 NSColor 与 UIColor?

    有什么区别UIColor and NSColor 什么时候会使用每一种 我碰到NSColor在试图弄清楚的同时UIColor用于 iOS 中的属性字符串 我理解使用UIColor对于 UIKit 等 但我不认为NSColor对于这种事情确实
  • iOS WKWebView 处理文件下载

    我面临以下问题 在 Web 界面中 文件下载是通过锚标记触发的 如下所示 a href bla blabla a 虽然 Safari 浏览器可以处理此请求并打开一个对话框来处理文件 但 WKWebView 将此视为普通链接并且不对其执行任何
  • 为什么等待冷任务不会抛出

    我只是在尝试看看当一个冷任务 即一个任务 时会发生什么Task尚未开始 正在等待 令我惊讶的是 代码永远挂起并且 完成的 永远不会被打印 我希望抛出异常 public async Task Test1 var task new Task g
  • 在 UITextView 中获取 HTML

    我在中显示htmlUITextView by self textView setValue b Content b forKey contentToHTMLString 编辑内容后UITextView 我想获取包含 html 的内容 所以我
  • 使用自动布局、IB 和字体大小时表头视图高度错误

    我正在尝试为我的 uiTableView 创建一个标题视图 不是节标题 我已经有了 我已经在界面生成器中设置了一个 XIB 所有的连接都已连接好并且运行良好 除了桌子没有给它足够的空间 我的问题是表格顶部与表格标题有一点重叠 我的 XIB
  • 使用 Quartz 创建 PDF 注释 (iOS)

    有人设法使用 Quartz 在现有 PDF 中编写自定义注释吗 我已经使用 CGPDFDocumentRef 等渲染了 PDF 现在工作正常 我成功地阅读了 Annots 字典 if CGPDFDictionaryGetArray page
  • “即发即忘”异步委托的正确方法

    就我而言 我对异步委托这个话题很生疏 如果我想以 一劳永逸 的方式异步调用一个方法 这是一种合适的方法吗 Action action DoSomething action BeginInvoke action EndInvoke null
  • NSURLCache 不缓存

    我正在使用 Xcode 6 1 6A1030 iOS7 和 iOS8 模拟器 NSURLCache 似乎没有缓存任何东西 我使用 Cache Control 标头 我的服务器返回带有 max age 6000 的 Cache Control
  • 如何将CIFilter应用到UIView上?

    根据Apple docs 过滤属性CALayer不支持iOS 当我使用正在申请的应用程序之一时CIFilter to UIView即 Splice Funimate 和 Artisto 的视频编辑器 Videoshow FX 这意味着我们可
  • UILabel 中的文本未垂直居中

    我使用以下代码创建了一个标签 func setupValueLabel valueLabel numberOfLines 1 valueLabel font UIFont name Avenir Black size 50 valueLab
  • XCode 7 中的 AWSS3TransferManagerUploadRequest

    我今天升级到 Xcode 7 Swift 2 0 我的项目正在使用 CocoaPods 我正在 POD 文件中导入所有与 AWS 相关的文件 我已经设置了桥接标头 并导入了 Amazon 告诉我的所有文件 在升级到 Swift 2 0 之前
  • 如何在 Android 应用程序中使用多个 Graph API 获取 Facebook Notes 项目的评论?

    我想使用 Graph API 显示 Facebook 页面的注释项目以及这些评论和点赞 为此 我使用 Facebook SDK 中的 asyncFacebookRunner 步骤是这样的 调用 asyncFacebookRunner req
  • 在 UITableView 的部分标题文本下方添加一些边距

    我已经设计了标题文本的样式 func tableView tableView UITableView cellForRowAtIndexPath indexPath NSIndexPath gt UITableViewCell let ce
  • 无需越狱即可检测iOS9上哪个应用程序处于前台

    我正在尝试记录用户在 iOS9 上的个人应用程序使用情况 我宁愿它不会使用越狱有限的解决方案 不言自明 在越狱手机上执行此应用程序的变体应该不难 https www andyibanez com create mobilesubstrate
  • 如何将自定义 C 代码放入 SwiftPM 包中?

    我正在尝试将 C 代码打包到 Swift 模块中 我们称之为CModule 一旦我将其放入项目的基本文件夹中 Swift模块 并配置了搜索路径 我可以在 Swift 文件中自动完成工作 并检测错误 警告 问题是 导入时它无法识别该模块 并且
  • 使用 boost 异步发送和接收自定义数据包?

    我正在尝试使用 boost 异步发送和接收自定义数据包 根据我当前的实现 我有一些问题 tcpclient cpp include tcpclient h include

随机推荐

  • Python在3D散点图中用线连接相邻点

    我有两组 x y z 坐标 我用 Matplotlib 将它们绘制在 3D 散点图中 现在 我想将每个生成的四边形与平面连接起来 我已经了解了如何在 3D 空间中绘制 2D 多边形在 python matplotlib 中绘制 3D 多边形
  • NLog - 将 NULL 写入可选数据库列

    我在用NLog http nlog project org用于登录 ASP Net 应用程序并通过 Microsoft Sql Server 使用数据库目标 我有一些可选的日志记录参数 但并不总是指定 但是 我希望在未提供这些内容时将其写为
  • 在 SwiftUI macOS 的帮助菜单下添加应用程序帮助

    如果您打开任何应用程序 它的顶部都有菜单栏项目 最后一个是帮助 当我现在运行适用于 macOS 的 SwiftUI 应用程序并按菜单上的帮助 然后按 应用程序名称 帮助 时 它只是说 帮助不适用于 应用程序名称 我如何添加对此的支持 在找到
  • Admob 如何确定文本上下文来显示有针对性的广告?

    1 Admob SDK是否能够检索应用程序中显示的所有文本字符串并根据这些文本字符串显示有针对性的广告 2 我是否必须手动指定字符串AdRequest setKeywords keywords EDIT setKeywords被忽略 Sou
  • spring mvc 为所有控制器提供一个初始化绑定器

    我有 5 个控制器 我想注册一个InitBinder对他们所有人 我知道我可以将此代码添加到每个代码中 InitBinder public void initBinder WebDataBinder binder binder regist
  • Jquery:获取页面的所有html源但排除一些#ids

    我正在尝试使用 html 或 contents 但我有奇怪的行为 我基本上需要获取页面的整个 dom 排除一些元素 例如 first second 并将其作为字符串传递 不再是 dom 是否可以 您可以克隆它 删除要从克隆中排除的元素 然后
  • Jetpack compose 的公开下拉菜单

    我想知道是否有针对 jetpack compose 的暴露下拉菜单的解决方案 我在 jetpack compose 中找不到该组件的正确解决方案 有什么帮助吗 The M2 从版本开始1 1 0 alpha06 https develope
  • 我可以在 Django 中使用 HTTP 基本身份验证吗?

    我们有一个在 Apache 上运行的网站 访问该网站有许多通过 HTTP 基本身份验证保护的静态页面 我使用 Django 内置的用户管理支持 用 Django 编写了网站的新部分 我遇到的问题是用户必须通过 HTTP Basic 身份验证
  • 如何使用 cURL 和 PHP 来欺骗引荐来源网址?

    我正在尝试使用 PHP 学习 cURL 来欺骗网站的引荐来源网址 我希望通过以下脚本来完成此任务 但它似乎不起作用 有什么想法 建议我哪里出错了 或者你知道有什么教程可以帮助我解决这个问题吗 Thanks Jessica
  • junit 测试用例生成器

    有没有一个好的工具可以根据一些原始模板自动生成 jUnit 测试用例 这样一来 没有太多 Java 或 jUnit 背景的工程师就可以编写测试用例 作为背景信息 这是用于黑盒测试 如果除了使用 jUnit 之外还有其他替代方法来运行回归测试
  • 在 Jenkins 管道中执行 gcloud 命令

    我尝试在 Jenkins 声明性管道中运行 gcloud 命令 如下例所示 pipeline agent any stages stage Run gcloud version steps sh gcloud version 我下载了 GC
  • Eclipse“增强类反编译器”插件调试时不反编译

    问题描述 查看类 即 Ctrl Shift T 时反编译工作正常 但从调试角度单步执行代码时则不然 而是打开 类文件查看器 使用的版本 Eclipse Oxygen 和增强型类反编译器 3 0 0 这也适用于氧气和更高版本 单击 窗口 gt
  • 在 ExtJS 网格中编辑整行后触发“afteredit”?

    我有一个 ExtJS 编辑器网格 里面有一些列 我想修改记录上的数据并将数据自动保存到数据库 但我只需要在完成编辑当前行的所有单元格后保存数据 我使用了 afteredit 事件 但它在一个单元格更改后立即触发了该事件 在完成所有单元格的修
  • 如何在 IndexPath 处使用 reloadRows 更新行

    我正在尝试使用按钮删除单元格 这是一个单元格的实现 UITableViewCell tableView UITableView tableView cellForRowAtIndexPath NSIndexPath indexPath st
  • Mac OS 10.14 Mojave + qt5.5 + gem capybara-webkit

    我的配置是 MAC Mojave v10 14 我尝试安装需要 qt5 5 的 gem Capybara webkit v 1 15 0 但 qt5 5 已从自制程序中删除 并且与 Xcode v10 不兼容 我试试这个 卸载 Xcode
  • 在 Android 中的 doinbackground() 中执行 UI 任务

    有没有办法在 AsyncTask 的 doinbackground 中执行 UI 任务 我很清楚最好在 onPostExecute 方法中执行此操作 但就我而言 由于我需要使用可重复使用的警报 因此能够访问我的 doinbackground
  • 查找 jQuery 中所有未选中的复选框

    我有一个复选框列表
  • Django,在模型中按函数过滤 Q 对象

    在我的 Profile 模型中 我有以下功能 它用于返回用户的全名 如果某些数据丢失 则返回用户的全名 def full name self first name self user first name strip if first na
  • 像java一样的Visual Studio参数化单元测试

    在 Java 测试环境中 我可以使用参数化单元测试 如以下代码所示 RunWith value Parameterized class public class JunitTest6 private int number public Ju
  • 在后台重新加载 UITableView 的数据

    在我的应用程序中 我有一个 UITableViewController 它的 tableView 分为 3 个部分 我从我的服务器下载每个部分的数据 为此 我有 3 个函数 例如 f1 f2 和 f3 每个更新一个相应的 NSArray 用