这很难解释,但基本上我想做的是从委托(delegate)方法调用基于 block 的方法中的完成处理程序。
我有调用上传函数的方法。
[[UploadManager sharedManager] uploadFile:@"/Path/To/Image.png" success:^(NSDictionary *response) {
NSLog(@"Uploaded");
}];
在 UpLoad 管理器内部,该方法执行所有必要的操作来上传文件。
有一个委托(delegate)方法,我想从中调用成功 block 。
- (void)fileDidUploadAndReceiveData:(NSData *)data {
NSDictionary *response = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&parseError];
// Call the completion method
success(response);
}
成功是在uploadFile方法中定义的。我将如何调用这个完成处理程序?
我在深夜写了这篇文章,所以如果它没有意义,请告诉我。
谢谢
最佳答案
声明一个属性是 block 的副本:
@property(nonatomic, copy) void (^completionBlock)(NSDictionary *);
在上传文件中赋值:
- (void)uploadFile:(NSString *)url success:(void (^)(NSDictionary *))completionBlock {
self.completionBlock = completionBlock;
// ...
然后随时调用它:
if (self.completionBlock) self.completionBlock(someDictionary);
self.completionBlock = nil; // see below
请记住,如果您不再需要该 block (您可能不需要,因为下载已完成),最好清除您的 block 副本。这样,如果调用者在 block 中引用下载管理器,您将打破他的保留周期( block 将保留保留 block 的下载管理器)。
关于objective-c - 从委托(delegate)方法调用完成 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22652785/