【问题标题】:Parsing XML in another Thread / simultaneously在另一个线程/同时解析 XML
【发布时间】:2010-08-06 17:01:40
【问题描述】:

我有一个应用程序,它通过 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];

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

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

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

你们中的任何人都可以帮我解决这个问题吗? 提前致谢。

【问题讨论】:

  • 堆栈溢出不使用 标签。使用“101”按钮将文本格式化为代码。

标签: iphone objective-c xml parsing simultaneous


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    How do i stop NSXMLParser?

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

    【讨论】:

    • 这对我来说效果很好,几乎正是我想要的。一些定制,一切都很好:) 非常感谢!
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多