2012-04-29 29 views
0

我有使用RestKit雖然大多數我的請求都被異步完成的,我有執行同步請求的問題啓用ARC-項目:奇怪RestKit/RKRequestQueue同步發行

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

回答

2

的RKClient方法已經增加了請求的默認請求隊列,所以我認爲這個問題是您發送的請求兩次 - 一次異步和一次同步。而不是使用RKClient 方法,手動配置請求。有一種方法setupRequest上RKClient,這將使它更容易爲你,你只需要定義URL,方法和參數,可以這樣:

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

[client setupRequest:req]; 

[req sendSynchronously]; 
+0

我最終只是把這些異步休息一下就好了我的要求,但這是正確的 – 2012-04-30 09:18:18