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は既に要求をデフォルトの要求キューに追加しているため、問題は要求を 2 回 (非同期と同期の 1 回) 送信することだと思います。RKClientポストメソッドを使用する代わりに、リクエストを手動で構成します。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 に答える