当将用户登录到我的应用程序时,我需要仅使用用户名从服务器拉下用户对象。这将返回我进行其他 API 调用所需的 userId(除其他外)。从那时起,我将使用 userId 进行几个其他 HTTP 调用。如何在发送其他调用之前进行同步调用以完全下拉用户对象?
我已经在我的应用程序委托(delegate)类中设置了我的对象映射,它工作得很好,并且我正在使用这段代码从服务器上拉下用户对象:
[[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) 崩溃并提示 “无法为 HTTP 方法“POST”找到类型为“(null)”的对象的可路由路径
.
最佳答案
抛开这是否是 iPhone 应用程序的理想设计这个问题,我能够使用 block 来完成我希望的事情。
[[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];
};
}];
希望这对某人有帮助。
关于ios - 使用 RestKit 进行同步 HTTP 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11768287/