我有两个不同类的实例,它们都需要向特定操作添加完成块。我将尝试一般性地解释问题,而不是解释我的应用程序试图做的所有事情。
视图控制器正在调用资源管理器类的实例以保存资源。资源管理器然后调用要保存的资源的类以获取用于保存的网络操作。
资源的实例创建操作并给它一个完成块,该块将在它触发时影响资源的状态。
这就是我的问题所在 - 资源类还需要向此操作添加一个完成块,以便通知视图控制器保存成功或失败。
这是管理器上保存方法的片段:
-(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
}
虽然我认为这在技术上会起作用,但我并不对此感到疯狂。感觉很时髦。我希望一个块封装第二个块,但这是不可能的,因为视图控制器和资源正在创建自己的完成块,而管理器类必须将它们粉碎在一起。
在这种情况下,是否有更优雅的方法将这两个完成块链接在一起,或者我目前创建一个包含原始两个块的块的方法是我能得到的最好的?
任何输入将不胜感激。