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

时间:2010-08-06 17:01:41

标签: 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];

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

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

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

你们中的任何人都可以帮助我吗? 提前谢谢。

3 个答案:

答案 0 :(得分:1)

永远不要从后台线程更新UI。始终在主线程上执行UI更新选择器。

答案 1 :(得分:0)

可以从多个线程访问Sqlite3数据库;你只需要为每个线程打开一个不同的数据库句柄。

答案 2 :(得分:0)

How do i stop NSXMLParser?

此解决方案可能会提供一些指导