iphone - 在另一个线程中/同时解析 XML

标签 iphone objective-c xml parsing simultaneous

我有一个应用程序,它通过 XML 文件获取数据。在解析部分期间,数据被写入/插入到设备上的本地 sqlite3 数据库中。 因此,如果数据已同步,则会出现加载屏幕(在后台执行)并告诉用户数据已同步。

通过以下代码可以很好地工作:

加载屏幕部分:

[self.view performSelectorInBackground:@selector(addSubview:) withObject:self.updateView];
[self.view performSelectorInBackground:@selector(bringSubviewToFront:) withObject:self.updateView];

for (NSURL *url in urlArray)
{
    // Set up a UILabel so the user can see which data is syncronized
    [self.updateLabel performSelectorInBackground:@selector(setText:) withObject:[NSString stringWithFormat:@"%@",url]];

    // Parsing part
    NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];

    // Setting the database-manager as delegate
    [xmlParser setDelegate:self.datencontroller];
    [xmlParser parse];
    [xmlParser release];
    [url release];
}

[self.updateView removeFromSuperview];

现在我遇到了以下问题:显然解析正在阻止正在运行的应用程序。由于我想实现取消方法,以便用户能够中断同步,所以我遇到了问题。

在解析部分完成/完成之前,不会注意到任何操作。因此,如果应用程序没有注意到按下按钮,那么实现调用取消方法的按钮是毫无用处的。

我尝试了多种在后台执行的方法等,但我遇到了数据管理器将数据存储在一个数据库中的问题。因此无法同时从两种不同的方式访问它并插入数据。

你们谁能帮我解决这个问题吗? 提前致谢。

最佳答案

切勿从后台线程更新 UI。始终在主线程上执行 UI 更新选择器。

关于iphone - 在另一个线程中/同时解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3426008/

相关文章:

ios - 如何根据互联网速度设置特定的视频质量

sql - Snowflake 中 XML 横向扁平化的意外行为(已过滤 1 个值的行)

iOS - 成就未显示在默认的 GameCenter View 中

objective-c - Objective C 扩展等同于 Swift 扩展?

iphone - 搜索页面的 UIPageControl 点

ios - ARC 不允许将非 Objective-C 指针类型 void* 隐式转换为 NSString*__strong*

java - 为什么 Spinner 不触发 onItemselected?

java - Webview 占据整个屏幕

iphone - NSPredicate 子查询语法

iphone - 具有可拉伸(stretch)背景图像的 UITableViewCell