我的应用程序将xml文件解析为coredata以填充uitableview。当我触发刷新时,它应该去下载一个新的xml文件,在后台线程上解析它,然后将它全部保存到managedobjectcontext(替换旧的managedobjectcontext数据),然后更新表。这样,与Twitter App类似,用户可以触发重新加载,并在加载时仍然滚动。
这似乎是一个非常标准的事情,但我似乎无法在那里找到任何帮助。
目前,我正在使用NSURLConnection在我的App Delegate中下载XML,而不是锁定UI。完成下载后,请致电:
ParseOperation * parseOperation = [[ParseOperation alloc] initWithData:receivedData andArray:[NSManagedObjectContext defaultContext]];
[self.parseQueue addOperation:parseOperation];
这启动了我认为是后台线程的解析。我可以在这里下载xml然后....
2个问题:1)如何将其保存到主线程的managedobjectcontext? 2)如何访问核心数据中的旧实体以与更新后的xml进行比较?
当然有人必须在此之前遇到过这样的代码吗?
答案 0 :(得分:0)
听起来你有正确的总体想法,但你的执行可能会被取消。
首先,将核心数据相关的操作放入NSOperation并不会让它完全神奇。您需要确保将MOC专用于操作实例(不要使用主线程MOC),然后使用performBlock方法确保使用正确的队列或连接了专用的MOC到同一个PSC并使用'did save'通知将更改合并回主线程MOC。
至于问题的第二部分,您需要执行现有数据的提取以确定项目是新项目还是更新项目,然后做出相应的反应。您可能希望先获取每个新项目而不是获取内容,然后使用内存中的谓词来过滤您正在寻找的数据(此方法更快但可能会导致内存压力,具体取决于项目数量和当出现故障时,它们在记忆中的大小。)