gpt4 book ai didi

icloud - 如何在 NSOperation 依赖项之间传递结果?

转载 作者:行者123 更新时间:2023-12-04 02:12:26 25 4
gpt4 key购买 nike

新的 Cloud Kit 框架将 NSOperation 广泛用于其 CRUD。这些操作的结果以 block 的形式返回。例如:

let fetchOperation = CKFetchRecordsOperation(recordIDs: [recordID1, recordId2])

fetchOperation.fetchRecordsCompletionBlock = {(dict: NSDictionary!, error: NSError!) -> Void in
// dict contains RecordId -> Record
// do something with the records here (if no error)
}

我想链接其中一些操作(依赖项),并将操作的结果传递给链中的下一个操作。简化示例来说明这一点(伪代码!):
let fetchOperation1 = CKFetchRecordsOperation(recordIDs: [recordID1, recordId2])

fetchOperation1.fetchRecordsCompletionBlock = {(dict: NSDictionary!, error: NSError!) -> Void in
if error {
// handle error
} else {
// dict contains RecordId -> Record
// let's pretend our records contain references to other records
// that we want to fetch as well
fetchOperation.operationResult =
dict.allValues().map(
{ $0.getObject("referencedRecordId"}
)
}
}

let fetchOperation2 = CKFetchRecordsOperation(recordIDs: fetchOperation1.operationResult)

fetchOperation2.fetchRecordsCompletionBlock = {(dict: NSDictionary!, error: NSError!) -> Void in
if error {
// handle error
} else {
// dosomething
}
}

fetchOperation2.addDependency(fetchOperation2)

但是上面的伪代码永远无法工作,因为在您初始化 fetchOperation2 时尚未分配 fetchOperation1.operationResult。您可以将 fetchOperation2 的 init 嵌套在 fetchOperation1 的 completionBlock 中,但是您放弃了 NSOperation 的依赖功能,我在这里尝试使用它。

因此,我正在寻找一种干净、可读、标准(无 react cocoa 等)的解决方案,让 NSOperation 依赖项在其链中传递数据。

最佳答案

我记得当NSOperation第一次介绍,我不得不为 ADC 网站写一篇介绍性文章,首先会下载一些照片,然后将它们渲染成海报。我在那里遇到了类似的问题:使用依赖项来控制顺序,但后来发现我必须将图像文件名传递给依赖操作。

那是很多年前的事了,当时我有NSOperation每个任务的子类。我设置了它们之间的依赖关系,并向需要传递早期操作结果的操作添加了一个委托(delegate)。在委托(delegate)方法中, Controller 对象将从第一个操作的属性中检索结果,并通过第二个操作的属性设置它们。

也许更好的解决方案是明确操作之间的关系,不仅在依赖关系方面,而且在数据传递方面。所以你可以创建 NSOperation将数据传递给下一个 NSOperation 的子类作为标准操作的一部分,或者 - 更优雅地 - 从已完成的操作中提取数据。

为了使这一点更具体:操作 B 取决于 A 的完成。 A 生成 B 运行所需的资源 R。您向 B 添加一个引用 A 对象的属性。当 B 运行时,它只是从 A 对象中检索 R。

如果您不想创建操作子类,而只是想避免 block 嵌套,则可以考虑使用队列机制来提供更多控制权,例如 CDEAsynchronousTaskQueue .

关于icloud - 如何在 NSOperation 依赖项之间传递结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24405137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com