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

我的问题是:由于我的经理是单身人士,如果在此期间另一个UIViewController发出了另一个API请求,则将委托设置为此控制器,并且在收到我的第一个请求responseObject时,我无法将其传递回第一个UIViewController不再。

我希望这很容易理解。

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

这是我的AFHTTPSessionManager类中的方法:

- (void)getStaffForCompany:(int)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 respondsToSelector:@selector(AGZClient:successedReceiveStaffList:)]) {
                [self.delegate AGZClient:self successedReceiveStaffList:responseObject];
            }
        } failure:^(NSURLSessionDataTask *task, NSError *error) {
            if ([self.delegate respondsToSelector:@selector(AGZClient:failedReceiveStaffList:)]) {
                [self.delegate AGZClient:self failedReceiveStaffList:error];
            }
        }];
    }
}

谢谢!

最佳答案

您可以定义自己的完成块,然后将responseObject传递回控制器,这是CustomCompletion的示例。

将此添加到AFHTTPSessionManager.h行上方的@implementation中。

typedef void(^CustomCompletion)(id responseObject);

更新您的方法以包括CustomCompletion对象。
- (void)getStaffForCompany:(int)companyID withCompletion:(CustomCompletion)completion {
    // On success pass the responseObject back like so.
    completion(responseObject);
}

然后where all the magic happens,回到控制器中,在单例上调用此方法并处理完成。
[SingletonManager getStaffForCompany:1 withCompletion:^(id responseObject) {
    if (responseObject) {
        // do something with this object
    }
}];

我尚未测试此代码,但是我在Swift中做了非常相似的事情,并且可以正常工作。

08-28 01:27