我想在后台线程中执行相当复杂的下载过程。此过程中的步骤之间存在一些自然依赖关系。例如,我需要在设置它们之间的关系之前完成表A和表B的下载(我使用的是核心数据)。
我首先考虑将每个依赖步骤放在它自己的NSOperation中,然后在两个操作之间创建依赖关系(即在一个操作中下载两个表,然后在下一个依赖操作中设置它们之间的关系)。但是,每个NSOperation都需要它自己的NSManagedContext,所以这不好。我不想保存背景上下文,直到下载了两个表并设置了它们的关系。
我因此得出结论,这应该都发生在一个NSOperation中,并且当我满足运行它的所有条件时,我应该使用通知或其他一些机制来调用依赖方法。
然而,我是iOS初学者,所以在我冒险走这条道路之前,我不介意我是否得出了正确的结论。
答案 0 :(得分:0)
考虑到你的验证要求,我认为在一次操作中它是最容易的,尽管就代码结构而言,这可能会变成一些毛球。
您基本上想要进行两次线程获取以获取所需的整个数据集,然后将数据组合并一次解析为Core Data。
如果您打算使用异步API,这实质上意味着构造一个等待两个操作完成的类,然后启动另一个执行解析和关系构建的NSOperation或块。
想象一下这个事件的顺序:
可能在代码中看起来像这样:
- (IBAction)someAction:(id)sender {
//fire both network requests
request1.delegate = aDelegate;
request2.delegate = aDelegate;
}
//later, inside the implementation of aDelegate
- (void)requestDidComplete... {
if (request1Finished && request2Finished) {
NSOperation *parse = //init with fetched data
//launch on queue etc.
}
}
这个解决方案容易出现两个主要缺陷:
基本上,你是在自己实现操作依赖,虽然由于NSURLConnection的结构可能没有好办法。