0

我有一个启用 ARC 的项目RestKit,虽然我的大部分请求都是异步完成的,但我在执行同步请求时遇到了问题:

在我的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
4

1 回答 1

2

RKClient 方法post已经将请求添加到默认请求队列,所以我认为问题在于您发送请求两次 - 一次异步和一次同步。手动配置请求,而不是使用 RKClient post方法。RKClient上有一个 setupRequest 方法,这将使您更容易,您只需要定义 url、方法和参数,如下所示:

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

[client setupRequest:req];

[req sendSynchronously];
于 2012-04-30T08:56:40.380 回答