gpt4 book ai didi

ios - 使用 NSTimer 在后台解析 XML 的最佳方法是什么

转载 作者:行者123 更新时间:2023-11-28 17:42:21 25 4
gpt4 key购买 nike

我需要定期异步解析 XML,以便当用户使用“PullToReload”重新加载 UITableView 时,它会加载更新后的值。我的赌注是使用 NSTimer...

我已经有了一个使用 TBXML 的 XML 解析器:

- (void) xmlParserWrapper
{
...
TBXMLParser *xmlParser = [[TBXMLParser alloc] initWithContext:context];
[xmlParser performSelectorInBackground:@selector(parseXMLFileAtURL:) withObject:xmlUrl];
}

所以我尝试使用 NSTimer

{
...
[NSTimer scheduledTimerWithTimeInterval:30 target:self selector:@selector(xmlParserWrapper) userInfo:nil repeats:YES];
}

只要用户在解析时不触摸 GUI,就可以正常工作。但是当用户点击 UITableViewCell 时,需要推送一个新的 UITableView 给 UINavigationController 并根据选中的 cell 值取数据;由于 NSManagedContext 在解析期间为空(直到它被填充),应用程序因“无效谓词:nil RHS”而崩溃。

我的代码现在变得非常大,所以我不能真正将它粘贴在这里,但请让我知道您需要查看代码的哪一部分,我会把它放在这里。

基本上,我只需要定期在后台进行 XML 解析,这样应用程序就不会崩溃。我还需要它位于另一个线程中,这样它就不会在用户导航到 UI 时阻塞 MainThread。

提前致谢,狐狸

最佳答案

我不是 iOS 专家,但是这个问题在任何 GUI 框架中都很常见,通常通过使用后台或工作线程来执行耗时的任务来解决,让主 GUI 线程处理用户交互。

您的解决方案应如下所示:

  1. 在应用程序启动时创建工作线程。
  2. 使用容器(列表)类来包含“工作队列”,您将在其中发布工作线程的工作。您需要实现自己的类或结构来描述要执行的每个工作单元。
  3. 使用同步机制来控制两个线程对工作队列的访问。
  4. 在工作线程中执行尽可能多的工作(即让它检索和解析 XML)。我本以为网络访问是这里最耗时的任务。
  5. 让工作线程用新内容更新 UI 元素。这里还有一个同步问题需要解决。
  6. 在应用程序终止时终止工作线程。

查看此 Apple Documentation在线程上,介绍如何在 iOS 下实现它。

关于ios - 使用 NSTimer 在后台解析 XML 的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7642475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com