gpt4 book ai didi

ios - 从 Response(RestKit) 加载对象时出错

转载 作者:可可西里 更新时间:2023-11-01 03:57:31 24 4
gpt4 key购买 nike

我为其余的 Response 创建了一个映射,并将其命名为 Data。在通过 RKObjectManager 进行其余调用后,它不会加载对象。而是执行 RKObjetLoader 的 didFailWithError 方法。我的实现类继承自 RKObjectLoaderDelegate。

@implementation RKObjectLoaderExamples

-(void)loadData{
RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[Data class]];
RKObjectManager* manager = [RKObjectManager objectManagerWithBaseURL:@"http://localhost:8080/activiti-rest/service"];
[manager loadObjectsAtResourcePath:@"/process-definitions?start=0&size=10&sort=id&order=asc&username=kermit&password=kermit" objectMapping:mapping delegate:self] ;
NSLog(@"Loaded Data");
}

// RKObjectLoaderDelegate methods

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects {
NSLog(@"objectLoaded");
Data* data = [objects objectAtIndex:0];
NSLog(@"Loaded Key: %@, Name: %@", data.key, data.name);
}


- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error {
NSLog(@"Encountered an error: %@", error);
}
@end

我得到的错误信息如下

2011-11-16 14:36:38.971 Views[16753:fb03] W restkit.network:RKResponse.m:182 Received an authentication challenge without any credentials to satisfy the request.
2011-11-16 14:36:38.974 Views[16753:fb03] W restkit.network:RKObjectLoader.m:242 Unable to find parser for MIME Type 'text/html'
2011-11-16 14:36:38.975 Views[16753:fb03] W restkit.network:RKObjectLoader.m:259 Encountered unexpected response with status code: 401 (MIME Type: text/html)
2011-11-16 14:36:38.976 Views[16753:fb03] Encountered an error: Error Domain=org.restkit.RestKit.ErrorDomain Code=4 "The operation couldn’t be completed. (org.restkit.RestKit.ErrorDomain error 4.)"

请帮忙!

更正后我将函数更改为

-(void)loadData{

[RKClient setSharedClient:[[RKClient alloc] initWithBaseURL:@"http://localhost:8080/activiti-rest/service"]];
RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[Data class]];
RKObjectManager* manager = [RKObjectManager objectManagerWithBaseURL:@"http://localhost:8080/activiti-rest/service"];
[manager setClient:[RKClient sharedClient]];
[[RKClient sharedClient] setUsername:@"kermit"];
[[RKClient sharedClient] setPassword:@"kermit"];
[manager loadObjectsAtResourcePath:@"/process-definitions?start=0&size=10&sort=id&order=asc" objectMapping:mapping delegate:self] ;
NSLog(@"Loaded Data");

}

是否正确?因为现在对象似乎已加载,但我得到的索引 0 超出了空数组的范围。我做错了吗?

最佳答案

您的 API 返回 HTTP 错误 401 未授权。您的后端是否需要 HTTP 身份验证?如果是这样,请向 RKClient 提供正确的凭据:

[[RKClient sharedClient] setUsername:myUsername];
[[RKClient sharedClient] setPassword:myPassword];

编辑:

我相信您在设置 RestKit 时遇到了一些基本问题。考虑以下示例。

//in your appdelegate
RKObjectManager* manager = [RKObjectManager objectManagerWithBaseURL:@"http://localhost:8080/activiti-rest/service"];
[[RKClient sharedClient] setUsername:@"kermit"];
[RKClient sharedClient] setPassword:@"kermit"];

// don't forget to create your mapping here
RKObjectMapping *dataMapping = [RKObjectMapping mappingForClass:[Data class]];
[dataMapping mapKeyPath:@"myKeyPath" toAttribute:@"myAttr"];
[[manager mappingProvider] addObjectMapping: dataMapping];

那么,你就可以做到这一点。

 -(void)loadData{
// fetch your mapping
[RKObjectMapping *mapping = [[RKObjectManager sharedManager].mappingProvider objectMappingForClass:[Data class]];
//request data
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/process-definitions?start=0&size=10&sort=id&order=asc" objectMapping:mapping delegate:self];
}

首先,您需要进行设置(RKClient、映射和 RKObjectManager)- 您只需一次。它们是单例,所以设置被保留。我发现执行此操作的最佳位置是 AppDelegate - 随意尝试,但请务必在执行任何请求之前进行设置。

当您要执行任何请求时,只需使用您的 [[RKObjectManager sharedManager] 单例来加载实际对象。

此外,我建议您阅读一些文档,例如。 Object Mapping guide

关于ios - 从 Response(RestKit) 加载对象时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8157707/

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