gpt4 book ai didi

ios - Objective-c + RestKit - 在下一步之前等待响应

转载 作者:搜寻专家 更新时间:2023-10-30 20:19:45 25 4
gpt4 key购买 nike

您好,在此先感谢您的帮助。我一直在寻找,但找不到答案。我只为 iOS 编程了一周。

到目前为止,与 Web 服务的所有连接都在运行,我已经创建了一个类和方法来执行这些调用。我正在进行标准登录,用户输入登录信息,应用程序将这些值传递给 Web 服务,然后返回一个 bool 值,具体取决于信息是否与数据库中的任何内容匹配。之后,应用程序获取返回值并移动到下一个屏幕或显示错误警报。或者至少那是我的目标。

问题是,在进行其余调用或解析响应之前,条件正在执行,我不太幸运找到解决方案。我读过有关异步和同步调用的信息,但在实现它们方面运气不佳。

这是调用代码:

//Class that has the methods for calling the web services
__restObj = [[restCalls alloc] init];
bool login = [__restObj restLogin:user passwd:pass];
if (login) {
[self performSegueWithIdentifier:@"adminLogin" sender:self];
}
else{
UIAlertView*alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Incorrect group name or password." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[alert show];
}

在实际 POST 发生之前执行的条件始终为 false。

这是我的方法:

- (bool)restLogin:(NSString*)user passwd:(NSString*)pass{
// Load the object model via RestKit
RKObjectManager *objectManager = [RKObjectManager sharedManager];

groupInfo *gi = [[groupInfo alloc] init];

gi.gName = user;
gi.pass = pass;


RKObjectMapping *userInfoMapping = [RKObjectMapping requestMapping];
[userInfoMapping addAttributeMappingsFromDictionary:@{@"gName": @"groupName",@"pass":@"pass"}];

RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:userInfoMapping
objectClass:[groupInfo class]
rootKeyPath:nil];
[objectManager addRequestDescriptor:requestDescriptor];
objectManager.requestSerializationMIMEType = RKMIMETypeJSON;

[objectManager postObject:gi
path:@"adminLoginIos"
parameters:nil
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
NSArray* statuses = [mappingResult array];
NSLog(@"Loaded statuses: %@", statuses);
_result = [statuses objectAtIndex:0];
}
failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"Hit error: %@", error);
}
];

return _result;
}

提前致谢,请记住,我在这方面真的很陌生,所以非常感谢您的帮助,如果我的代码不是最好的,请告诉我。

问候,化学成分

最佳答案

您需要传入一个 block ,然后在成功回调中, block 返回_result。

基于您的结构的示例如下:

-(void) restLogin:(NSString*)user passwd:(NSString*)pass block:(void (^)(id))block {
// Load the object model via RestKit
RKObjectManager *objectManager = [RKObjectManager sharedManager];

groupInfo *gi = [[groupInfo alloc] init];

gi.gName = user;
gi.pass = pass;


RKObjectMapping *userInfoMapping = [RKObjectMapping requestMapping];
[userInfoMapping addAttributeMappingsFromDictionary:@{@"gName": @"groupName",@"pass":@"pass"}];

RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:userInfoMapping
objectClass:[groupInfo class]
rootKeyPath:nil];
[objectManager addRequestDescriptor:requestDescriptor];
objectManager.requestSerializationMIMEType = RKMIMETypeJSON;

[objectManager postObject:gi
path:@"adminLoginIos"
parameters:nil
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
NSArray* statuses = [mappingResult array];
NSLog(@"Loaded statuses: %@", statuses);
_result = [statuses objectAtIndex:0];
block(_result);
}
failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"Hit error: %@", error);
block(nil);
}
];

}

您对该方法的调用类似于:

[__restObj restLogin:user passwd:pass block:^(id obj) {
// do something here to translate that object into a BOOL and check value
}];

我不使用 RestKit,所以我无法验证这是否正是您所需要的,但它应该能让您走上正确的道路。也就是说,如果您想查看 AFNetworking,我写了一个我不介意分享的 NetworkClient 包装器。

关于ios - Objective-c + RestKit - 在下一步之前等待响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15252414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com