ios - 如何处理类之间完成 block 的结果

标签 ios objective-c delegates objective-c-blocks completion

假设我有一个类 UploadManager 并在我的 ViewController 中创建了它的一个实例。 UploadManager.m 有一个方法 -(void)requestData

-(void)requestData
{
    HTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] init];
    [operation setCompletionBlockWithSuccess:^(HTTPRequestOperation *operation, id responseObject){
        // Do something here
    }];
    [operation start];
}

现在我可以从 ViewController.m 中的 UploadManager 实例调用 requestData 方法,但我想用触发完成 block 后,ViewController.m 中的 responseObject。这样做的最佳方法是什么?我假设我可以制作一个委托(delegate)方法,但我想知道是否有更好的解决方案。谢谢。

最佳答案

你可以为此使用 block 结构

   -(void)requestDataWithHandler:(void (^)(id responceObject))handler
    {
        HTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] init];
        [operation setCompletionBlockWithSuccess:^(HTTPRequestOperation *operation, id responseObject){
            // Do something here

        if(handler)
        {
           handler(responceObject)
        }
        }];
        [operation start];
    }

在另一个类(class)

 [uploadManager requestDataWithHandler:^(responceObject) {
    // here work with responeObject
    }];

关于ios - 如何处理类之间完成 block 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27534329/

相关文章:

c# - 如何传入特定类的方法名作为另一个方法的参数

c# - 将 IronPython 方法分配给 C# 委托(delegate)

ios - 定义 Bundle.main.url 以在 iOS9 及以上版本的 Swift 4 中使用 Core Data

objective-c - 获取 NS_ENUM 项目数量的优雅方式

ios - 如何从堆栈中删除旧的 ViewController

ios - ScaleToFit 不起作用

ios - SiriKit INPayBillIntentHandling - Siri 说, "I wish I could, but <App> hasn' t 还没有和我一起设置。”

c# - C#(或其他语言)中委托(delegate)的使用

ios - UiImagePicker 自定义部分

javascript - 如果使用 jquery/javascript 锁定 iphone,如何提交表单