0

将用户登录到我的应用程序时,我需要仅使用用户名从服务器中提取用户对象。这将返回进行其他 API 调用所需的 userId(除其他外)。从那时起,我将使用 userId 进行其他几个 HTTP 调用。如何在发送其他调用之前进行同步调用以完全下拉用户对象?

我已经在我的应用程序委托类中设置了我的对象映射,它运行良好,并且正在使用此代码从服务器中拉出用户对象:

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:[@"/api/users/" stringByAppendingString:[_userNameField text]] delegate:self];

这就是我尝试过的......正如这里所建议的那样:使用 RestKit 进行同步调用

RKObjectLoader* loader = [[RKObjectManager sharedManager] objectLoaderForObject:currentUser method:RKRequestMethodPUT delegate:nil];
RKResponse* response = [loader sendSynchronously];

但是,此代码 (1) 使用已弃用的方法 objectLoaderForObject 并且 (2) 崩溃说'Unable to find a routable path for object of type '(null)' for HTTP Method 'POST''.

4

1 回答 1

4

撇开这是否是 iPhone 应用程序的理想设计这个问题不谈,我能够使用积木完成我希望的事情。

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:[@"/api/users/" stringByAppendingString:[_userNameField text]] usingBlock:^(RKObjectLoader* loader) {

    loader.onDidLoadResponse = ^(RKResponse *response) {

        NSLog(@"Response: \n%@", [response bodyAsString]);
    };

    loader.onDidLoadObjects = ^(NSArray *objects) {

        APIUser *apiUser = [objects objectAtIndex:0];
        NSLog(@"user_id is %i", apiUser.user_id);


    };

    loader.onDidFailWithError = ^(NSError *error) {


            UIAlertView *badLoginAlert = [[UIAlertView alloc]initWithTitle:NSLocalizedString(@"LOGIN_FAILED", nil)
                                                                   message:NSLocalizedString(@"BAD PASSWORD OR USERNAME", nil)
                                                                  delegate:self
                                                         cancelButtonTitle:NSLocalizedString(@"OK", nil)
                                                         otherButtonTitles:nil];
            [badLoginAlert show];           
    };
}];

希望这可以帮助某人。

于 2012-08-06T21:31:21.140 回答