我有一个使用RestKit的支持ARC的项目,尽管我的大多数请求都是异步完成的,但是在执行同步请求时还是有一个问题:

在我的AppDelegate中:

else if (![IKUserController loggedInUserIsAuthenticated]) {
    IKLoginViewController *loginVC = [[IKLoginViewController alloc] init];
    loginVC.scenario = SCENARIO_EXISTING;
    [self.window.rootViewController presentModalViewController:loginVC animated:YES];
}


loggedInUserIsAuthenticated的实现中:

+ (BOOL)loggedInUserIsAuthenticated {
    IKUser *user = [IKUserController loggedInUser];

    if (!user) {
        return NO;
    }
    else {
        NSString *username = user.userName;
        NSString *password = user.userPassword;

        if ([IKUserController loginWithUsername:username password:password]) {
            return YES;
        }
        else {
            return NO;
        }
    }

    return NO;
}


loginWithUserName:password:

+ (BOOL)loginWithUsername:(NSString *)username password:(NSString *)password {

    //return YES;

    NSDictionary *params = [[NSDictionary alloc] initWithObjectsAndKeys:username, @"username", password, @"password", nil];

    RKResponse *response = [[[RKClient sharedClient] post:@"/user/authenticate" params:params delegate:nil] sendSynchronously];

    if (response.isOK) {
        return YES;
    }
    else {
        return NO;
    }

    return NO;
}


和错误:

*** Assertion failure in -[RKRequestQueue removeRequest:decrementCounter:], /Users/admin/Documents/dev/RestKit/Code/Network/RKRequestQueue.m:350

最佳答案

RKClient方法发布已经将请求添加到默认请求队列中,因此我认为问题是您发送了两次请求-一次异步一次。而不是使用RKClient post方法,而是手动配置请求。 RKClient上有一个方法setupRequest,这将使您更轻松,并且只需定义url,方法和参数,如下所示:

RKRequest* req = [RKRequest requestWithURL:reqURL delegate:self];
[req setMethod:RKRequestMethodPOST];
[req setParams:params];

[client setupRequest:req];

[req sendSynchronously];

10-08 09:14