2011-05-18 67 views
3

我的应用程序将xml文件解析为coredata以填充可用视图。当我触发一次刷新时,它应该去下载一个新的xml文件,在后台线程上解析它,然后一次将所有文件保存到managedobjectcontext(替换旧的managedobjectcontext数据),然后更新表。这样,与Twitter应用类似,用户可以触发重新加载并在加载时仍然滚动。将XML解析为后台线程上的CoreData,以不锁定UI

这似乎是一个非常标准的事情要做,但我似乎无法找到任何帮助。

目前我正在使用NSURLConnection在我的应用程序委托下载XML以不锁定用户界面。一旦它完成下载它的电话:

ParseOperation * parseOperation = [[ParseOperation alloc] initWithData:receivedData andArray:[NSManagedObjectContext defaultContext]];

[self.parseQueue addOperation:parseOperation];

这开始解析我认为是后台线程。我可以在这里下载xml,然后......

2问题:1)如何将它保存到主线程的managedobjectcontext? 2)如何访问核心数据中的旧实体以与更新后的xml进行比较?

肯定有人必须遇到这之前...任何示例代码在那里?

回答

0

这听起来像你有正确的一般想法,但你的执行可能关闭。

首先,将一个核心数据相关的操作放到一个NSOperation中并不会使它神奇地工作。您需要确保将MOC专用于操作实例(不要使用主线程MOC),然后使用performBlock方法确保使用正确的队列具有连接到相同PSC的专用MOC,使用'did save'通知将更改合并回主线程MOC。

至于问题的第二部分,您需要执行现有数据的提取以确定项目是新的还是更新,然后做出相应的反应。您可能不想获取每个新项目,而是使用内存中的谓词来过滤要从该集合中查找的数据(此方法更快,但可能会导致内存压力取决于项目的数量和当故障时它们在记忆中有多大)。