【发布时间】:2015-12-23 08:38:16
【问题描述】:
我有两个NSOperation 负责下载和解析。下载操作成功后,我收到一些NSData,然后我想将该数据设置为解析操作要使用的数据:
init(context: NSManagedObjectContext, completionHandler: Void -> Void) {
downloadOperation = DownloadActivitiesOperation() { data in
self.parseOperation.data = data
}
parseOperation = ParseActivitiesOperation(context: context)
let finishOperation = NSBlockOperation(block: completionHandler)
parseOperation.addDependency(downloadOperation)
finishOperation.addDependency(parseOperation)
super.init(operations: [downloadOperation, parseOperation, finishOperation])
name = "Get Activities"
}
但这不起作用,因为我在调用super.init 之前尝试在我的下载完成块中使用self。
我的问题是,当尝试将一个操作的结果传递给链中的下一个操作时,最好的方法是什么?
【问题讨论】:
-
如果在您的代码中将 parseOperation 实例化为局部变量,您应该能够在下载完成块中使用它。然后,您可以将 self.parseOperation 设置为指向同一个对象 - 因此您应该能够通过对代码进行少量修改来实现所请求的功能。
-
不管怎样,在这种情况下,我喜欢使用 Bolts 框架。这是一种将并行或串行任务链接在一起的非常简单的方法,并且可以与 NSOperation、GCD 等一起使用。如果您有兴趣,请查看。 github.com/BoltsFramework/Bolts-iOS
标签: ios swift ios9 nsoperation