からcancelAllOperationsを呼び出し、pleaesは私と一緒にクマ:私はのように明確に可能な限りこれを説明することを試みてきたように、私は次のような状況に苦しんだネストされたNSOperations
私はのサブクラスであるクラスCoummintyOperationを持っていますGroupOperation。 CommuityOperationが呼び出され、NSOperationQueueに追加されます。 CommunityOperationは、GroupOperationのサブクラスでもあるNSOperationsを一斉に呼び出すと、その中でNSoperationsを呼び出しています。 CommunityOperationクラスのGroupOperationsの依存関係を追加しました。 私が扱っている問題は、ネストされた操作が失敗した場合です。私はCommunityOperationsクラスのすべてのNSOperationsをキャンセルする必要がありますが、cancelOllOperationsメソッドを呼び出すためにCommunityOperationが追加されたoperationQueueにアクセスできません。
誰でもこのメソッドを呼び出す方法を説明し、このクラスのすべての操作(したがってすべての入れ子にされた操作)をキャンセルして、エラーメッセージを表示することができます。事前
で
おかげでここに私の問題を説明するためのいくつかのサンプルコードです:で操作を入れ子になった CommunityOperationが別のクラスからoperationQueueに入れます(含まれていない)
public class CommunityOperation: GroupOperation {
var updateOperation: UpdateOperation!
var menuOperation: MenuOperation!
var coreDataSaveOperation: CoreDataSaveOperation!
var hasErrors = false
public init() {
super.init(operations: [])
updateOperation = UpdateOperation()
menuOperation = MenuOperation()
coreDataSaveOperation = CoreDataSaveOperation()
coreDataSaveOperation.addDependencies([updateOperation, menuOperation])
self.addOperation(updateOperation)
self.addOperation(menuOperation)
self.addOperation(coreDataSaveOperation)
}
}
MenuOperationクラス、同様に:
class UpdateMenuOperation: GroupOperation {
let downloadGroupsOperation: DownloadGroupsOperation
let downloadMembersOperation: DownloadMembersOperation
init() {
downloadGroupsOperation = DownloadGroupsOperation()
downloadMembersOperation = DownloadMembersOperation(])
super.init(operations: [downloadGroupsOperation,
downloadMembersOperation
])
}
}
DownloadGroupOperationクラスは再びGroupOperationのサブクラスです。これは、2つの事業を展開しています - データ解析するデータをダウンロードする第一及び第二:最後に
class DownloadTopGroupsOperation: GroupOperation {
let downloadOperation: DownloadOperation
let importTopGroupsOperation: ImportOperation
init() {
downloadOperation = DownloadOperation()
importOperation = ImportOperation()
importOperation.addDependency(downloadOperation)
importOperation.addCondition(NoCancelledDependencies())
super.init(operations: [downloadOperation, importOperation])
}
}
そして(やれやれ)DownloadOperationクラスはNSURLSessionと方法downloadTaskWithURL
を使用していますが、それは私が欲しいこのメソッドの完了ハンドラ内ですエラーが返された場合、メインオペレーションキューのcancelAllOperationsを呼び出す:
ソースコードが役立ちます。あなたは何をしているのか簡単な例をまとめることができますか? – Dominic
@Dominicどのような提案ですか? – mrcurious