gpt4 book ai didi

objective-c - 从委托(delegate)方法调用完成 block

转载 作者:太空狗 更新时间:2023-10-30 03:57:49 25 4
gpt4 key购买 nike

这很难解释,但基本上我想做的是从委托(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/

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