異なるクラスの2つのインスタンスがあり、どちらも特定の操作に完了ブロックを追加する必要があります。私のアプリがやろうとしていることすべてを説明するのではなく、問題を一般的に説明しようとします。
ビューコントローラは、リソースを保存するためにリソースマネージャクラスのインスタンスを呼び出しています。次に、リソースマネージャは、保存するリソースのクラスを呼び出して、保存用のネットワーク操作を取得します。
リソースのインスタンスは操作を作成し、起動時にリソースの状態に影響を与える完了ブロックを提供します。
これが私の問題です。ビューコントローラに保存の成功または失敗を通知するために、リソースクラスもこの操作に完了ブロックを追加する必要があります。
これがマネージャーのsaveメソッドの抜粋です。
-(void)save:resource withCompletion:completion
{
.
.
.
NSOperation *operation = [resource operationForSave];
NSOperation __weak *weakOperation = operation;
void(^__weak resourceCompletion)(void)= operation.completionBlock;
[operation setCompletionBlock:^{
if (resourceCompletion) {
resourceCompletion();
}
if (completion) {
if (weakOperation.error) {
completion(NO, operation.error);
}
else {
completion(YES, nil);
}
}
}];
.
.
.
// add the operation to a network operation queue
}
これは技術的にはうまくいくと思いますが、私はそれに夢中ではありません。かなりファンキーな感じがします。1つのブロックで2番目のブロックをカプセル化することをお勧めしますが、View Controllerとリソースが独自の完了ブロックを作成しており、managerクラスがそれらを一緒にスマッシュする必要があるため、これは不可能です。
この状況でこれらの2つの完了ブロックをチェーンするよりエレガントな方法はありますか、それとも元の2つのブロックを含むブロックを作成する現在の方法が最善ですか?
任意の入力をいただければ幸いです。