我有一个名为 DataFetcher 的模型类,它通过 Web 服务获取数据,然后将数据保存到 Core Data 数据存储区,然后通过委托方法更新 ViewController。这是不使用 NSOperation 的正常序列(正常工作):
NSArray *serviceQueryResult = [self queryServiceFor:@"car"];
[self setData:serviceQueryResult];
[self persistData:_data];
[_loadDelegate updateCount:_data.count];
[_loadDelegate receivedData:_data];
我需要将 Web 服务调用和数据库更新调用放在后台线程上。我的想法是创建一个 NSBlockOperation 来进行 Web 服务调用,然后创建另一个 NSBlockOperation 来进行数据库更新。Web 服务操作在数据库更新操作开始之前完成存在依赖性。这是我要实现的代码:
__weak DataFetcher *weakSelf = self;
__block NSArray *serviceQUeryResult;
NSBlockOperation *webServiceOperation = [NSBlockOperation blockOperationWithBlock:^{
serviceQUeryResult = [weakSelf queryServiceFor:@"mini"];
[weakSelf setData:serviceQUeryResult];
}];
NSBlockOperation *dbInsertOperation = [NSBlockOperation blockOperationWithBlock:^{
[weakSelf persistData:serviceQUeryResult];
}];
[webServiceOperation addDependency:dbInsertOperation];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation:webServiceOperation];
当以这种方式设置时,我的 queryServiceFor: 方法永远不会被调用。我也不确定在哪里放置两个委托方法调用,因为它们更新 UI 并且应该在主线程上。我过去曾多次使用 GCD,但现在需要 NSOperations 的一些额外功能。任何人都可以帮忙吗?谢谢!