在我成功使用RestKit进行对象映射并且不断收到错误“无法找到keyPath的对象映射:''”之后,我一直尝试使用RestKit发布。
我已经成功使用iOS的JSON并使用以下代码:
responseData = [NSMutableData data];
NSURL *url = [NSURL URLWithString:@"http://lalubema.cloudapp.net:9000/Data.soap/Pessoa"];
NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
[params setObject:@"Objective-c test from send Request #1" forKey:@"Nome"];
[params setObject:@"/Date(1200355200000)/" forKey:@"DataNascimento"];
[params setObject:@"M" forKey:@"Sexo"];
[params setObject:@"(31)2321-2383" forKey:@"Telefone"];
NSError *jsonError;
NSData *requestdata = [NSJSONSerialization dataWithJSONObject:params options:0 error:&jsonError];
NSMutableURLRequest *request;
request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:[NSString stringWithFormat:@"%d", [requestdata length]] forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:requestdata];
//this kicks off the request asynchronously
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
我正在尝试使用RestKit并获取错误的代码如下:
[RKObjectManager sharedManager].serializationMIMEType = RKMIMETypeJSON;
[RKObjectManager sharedManager].acceptMIMEType = RKMIMETypeJSON;
RKObjectMapping* pessoaMapping = [RKObjectMapping mappingForClass:[Pessoa class]];
pessoaMapping.setDefaultValueForMissingAttributes = YES;
[pessoaMapping mapKeyPath:@"DataNascimento" toAttribute:@"dataNascimento"];
[pessoaMapping mapKeyPath:@"Nome" toAttribute:@"nome"];
[pessoaMapping mapKeyPath:@"Sexo" toAttribute:@"sexo"];
[pessoaMapping mapKeyPath:@"Telefone" toAttribute:@"telefone"];
[[RKObjectManager sharedManager].mappingProvider addObjectMapping:pessoaMapping];
RKObjectMapping* pessoaSerializationMapping = [RKObjectMapping mappingForClass:[NSMutableDictionary class]];
[pessoaSerializationMapping mapAttributes:@"dataNascimento", @"docIdentidade", @"email", @"foto", @"pid", @"nome", @"senha", @"sexo", @"telefone", nil];
[[RKObjectManager sharedManager].mappingProvider setSerializationMapping:pessoaSerializationMapping forClass:[Pessoa class]];
RKObjectRouter *router = [[RKObjectManager sharedManager] router];
[router routeClass:[Pessoa class] toResourcePath:@"/Pessoa/:id"];
[router routeClass:[Pessoa class] toResourcePath:@"/Pessoa" forMethod:RKRequestMethodPOST];
Pessoa *Novo = [[Pessoa alloc] init];
Novo.nome = @"Objective-c test from send postPessoa #1";
Novo.telefone = @"(31)1234-5678";
Novo.sexo = @"M";
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"dd-MM-yyyy"];
RKDotNetDateFormatter *dotNetFormattedDate = [[RKDotNetDateFormatter alloc] init];
NSString *data = [dotNetFormattedDate stringFromDate:[df dateFromString: @"10-10-1979"]];
Novo.dataNascimento = data;
// POST to /Pessoa
[[RKObjectManager sharedManager] postObject:Novo delegate:self];
RKLog错误是:
2012-06-27 17:58:28.539 MyTestApp [6101:fb03]我的restkit:RKLog.m:33 RestKit初始化......
2012-06-27 17:58:28.589 MyTestApp [6101:fb03]我的restkit.network.reachability:RKReachabilityObserver.m:369已确定可达性观察者的网络可用性
2012-06-27 17:58:41.260 MyTestApp [6101:fb03] W restkit.object_mapping:RKObjectMapper.m:81添加映射错误:无法找到keyPath的对象映射:''
2012-06-27 17:58:41.261 MyTestApp [6101:fb03] E restkit.network:RKObjectLoader.m:222映射过程中遇到的错误:无法找到keyPath的对象映射:''
2012-06-27 17:58:41.261 MyTestApp [6101:fb03] E restkit.network:RKObjectLoader.m:345尝试从有效负载映射服务器端错误时遇到错误:无法找到keyPath的对象映射:''
2012-06-27 17:58:41.262 MyTestApp [6101:fb03] Erro encontrado:Error Domain = org.restkit.RestKit.ErrorDomain Code = 1001“找不到keyPath的对象映射:''”UserInfo = 0x808fac0 {= RKObjectMapperKeyPath,NSLocalizedDescription =无法找到keyPath的对象映射:''}
答案 0 :(得分:0)
我认为主要问题由此代码块表示:
RKObjectMapping* pessoaMapping = [RKObjectMapping mappingForClass:[Pessoa class]];
pessoaMapping.setDefaultValueForMissingAttributes = YES;
[pessoaMapping mapKeyPath:@"DataNascimento" toAttribute:@"dataNascimento"];
[pessoaMapping mapKeyPath:@"Nome" toAttribute:@"nome"];
[pessoaMapping mapKeyPath:@"Sexo" toAttribute:@"sexo"];
[pessoaMapping mapKeyPath:@"Telefone" toAttribute:@"telefone"];
[[RKObjectManager sharedManager].mappingProvider addObjectMapping:pessoaMapping];
RKObjectMapping* pessoaSerializationMapping = [RKObjectMapping mappingForClass:[NSMutableDictionary class]];
[pessoaSerializationMapping mapAttributes:@"dataNascimento", @"docIdentidade", @"email", @"foto", @"pid", @"nome", @"senha", @"sexo", @"telefone", nil];
[[RKObjectManager sharedManager].mappingProvider setSerializationMapping:pessoaSerializationMapping forClass:[Pessoa class]];
你应该尝试替换:
RKObjectMapping* pessoaMapping = [RKObjectMapping mappingForClass:[Pessoa class]];
pessoaMapping.setDefaultValueForMissingAttributes = YES;
[pessoaMapping mapKeyPath:@"DataNascimento" toAttribute:@"dataNascimento"];
[pessoaMapping mapKeyPath:@"Nome" toAttribute:@"nome"];
[pessoaMapping mapKeyPath:@"Sexo" toAttribute:@"sexo"];
[pessoaMapping mapKeyPath:@"Telefone" toAttribute:@"telefone"];
// up until this point, the code is the same, changes below
// -------------------------------------------------------------------------------
// map rest of the attributes, considering key paths match attribute names exactly
[pessoaMapping mapAttributes:@"docIdentidade", @"email", @"foto", @"pid", @"senha", nil];
// set the serialization mapping
[[RKObjectManager sharedManager].mappingProvider setSerializationMapping:[pessoaMapping inverseMapping] forClass:[Pessoa class]];
另外,另一个问题出在以下几行:
[router routeClass:[Pessoa class] toResourcePath:@"/Pessoa/:id"];
Pessoa 类中的标识符属性似乎名为 pid ,如 mapAttributes:调用中所示。在设置路由器的资源路径时,我假设RestKit不知道使用KVC替换:id 的值。