• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - AFHTTPSessionManager 委托(delegate)问题

[复制链接]
菜鸟教程小白 发表于 2022-12-12 15:04:01 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

这是我的问题: 我有一个 AFHTTPSessionManager 文件,它也是一个单例,并管理我对服务器的所有 API 请求。一旦我通过 responseObject 从服务器获得了答案,我将其传递回 UIViewController,后者使用委托(delegate)请求它。

我的问题是:由于我的经理是单例,如果另一个 API 请求同时由另一个 UIViewController 发出,则委托(delegate)设置为这个 Controller ,当我第一次请求 responseObject收到了 我不能再把它传回第一个 UIViewController 了。

我希望它很容易理解。

解决这个问题的正确方法是什么?

这是我的 AFHTTPSessionManager 类中的方法的样子:

- (void)getStaffForCompanyint)companyID
{
    if ([[NSUserDefaults standardUserDefaults] objectForKey"currentUser"])
    {
        NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
        parameters[@"apiKey"] = agendizeApiKey;
        parameters[@"token"] = [[AGZUserManager sharedAGZUser] currentApplicationUser].token;

        [self GET:[NSString stringWithFormat"scheduling/companies/%d/staff", companyID] parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) {
            if ([self.delegate respondsToSelectorselector(AGZClient:successedReceiveStaffList]) {
                [self.delegate AGZClient:self successedReceiveStaffList:responseObject];
            }
        } failure:^(NSURLSessionDataTask *task, NSError *error) {
            if ([self.delegate respondsToSelectorselector(AGZClient:failedReceiveStaffList]) {
                [self.delegate AGZClient:self failedReceiveStaffList:error];
            }
        }];
    }
}

谢谢!



Best Answer-推荐答案


您可以定义自己的完成 block 并将您的 responseObject 传回 Controller ,这是一个示例 CustomCompletion

将其添加到 AFHTTPSessionManager.h@implementation 行上方。

typedef void(^CustomCompletion)(id responseObject);

更新您的方法以包含 CustomCompletion 对象。

- (void)getStaffForCompanyint)companyID withCompletionCustomCompletion)completion {
    // On success pass the responseObject back like so.
    completion(responseObject);
}

然后所有魔法发生的地方,回到你的 Controller 中,在你的单例上调用这个方法并处理完成。

[SingletonManager getStaffForCompany:1 withCompletion:^(id responseObject) {
    if (responseObject) {
        // do something with this object
    }
}];

我还没有测试过这段代码,但我在 Swift 中做了一些非常相似的事情,而且效果很好。

关于ios - AFHTTPSessionManager 委托(delegate)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29634630/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap