我有一个应用程序,它通过 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。因为我想实现一个取消方法,以便用户能够中断同步,所以我遇到了一个问题。
在解析部分完成/完成之前,不会注意到任何动作。因此,如果应用程序没有注意到按钮按下,那么实现一个调用取消方法的按钮是毫无用处的。
我尝试了几种在后台执行的方法等,但我遇到了数据管理器将数据存储在一个数据库中的问题。所以没有办法从两种不同的方式同时访问它并插入数据。
你们中的任何人都可以帮我解决这个问题吗?提前致谢。