代码之家  ›  专栏  ›  技术社区  ›  Kyle Clegg

使用RestKit进行同步HTTP调用

  •  0
  • Kyle Clegg  · 技术社区  · 12 年前

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

    我已经在我的应用程序委托类中设置了对象映射,它运行得很好,并使用以下代码从服务器中提取用户对象:

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

    这就是我尝试过的。。。如这里所建议的: Making synchronous calls with 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''

    1 回复  |  直到 7 年前
        1
  •  4
  •   Kyle Clegg    12 年前

    抛开这是否是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];           
        };
    }];
    

    希望这能帮助到别人。