RESTkit无法识别的选择器错误

时间:2012-01-11 11:22:24

标签: ios restkit

我正在尝试通过iPhone将人员课程添加到我的服务器。

我有以下代码,我收到此错误:

  

* 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'+ [Person object]:无法识别的选择器发送到类0x5fe6c'错误

@interface Data : NSObject {
Person *person;
NSArray *dogs;
}
@property (nonatomic ,retain) Person *person;
@property (nonatomic ,retain) NSArray *dogs;
@end

@interface Person : NSObject {

NSString *name;
NSNumber *personId;
NSDate   *updatedAt;
NSDate   *createdAt;

}

@property (nonatomic , retain) NSDate * createdAt;
@property (nonatomic , retain) NSDate * updatedAt;
@property (nonatomic , retain) NSNumber  *personId;
@property (nonatomic , retain) NSString *name;
@end

RKObjectMapping* userMapping = [RKObjectMapping mappingForClass:[Person class]];

[userMapping mapKeyPath:@"created_at" toAttribute:@"createdAt"];
[userMapping mapKeyPath:@"updated_at" toAttribute:@"updatedAt"];
[userMapping mapKeyPath:@"name" toAttribute:@"name"]; 
[userMapping mapKeyPath:@"id" toAttribute:@"personId"];

RKObjectMapping* dogMapping = [RKObjectMapping mappingForClass:[Dog class]];
[dogMapping mapKeyPath:@"created_at" toAttribute:@"createdAt"]; 
[dogMapping mapKeyPath:@"person_id" toAttribute:@"spersonId"]; 
[dogMapping mapKeyPath:@"name" toAttribute:@"name"]; 
[dogMapping mapKeyPath:@"updated_at" toAttribute:@"updatedAt"]; 
[dogMapping mapKeyPath:@"id" toAttribute:@"dogId"]; 

RKObjectMapping *dataMapping = [RKObjectMapping mappingForClass:[Data class]]; 
[dataMapping mapKeyPath:@"dog" toAttribute:@"dogs"]; 
[dataMapping mapKeyPath:@"person" toRelationship:@"person" withMapping:userMapping]; 
[[RKObjectManager sharedManager].mappingProvider addObjectMapping:dataMapping]; 

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/people"       
objectMapping:dataMapping delegate:self]; 


-(void)createObject{

RKObjectRouter * router = [RKObjectManager sharedManager].router;
[router routeClass: [Person class] toResourcePath:@"/people/:personId"];
[router routeClass: [Person class] toResourcePath:@"/people"          
forMethod:RKRequestMethodPOST];
Data *data =[[Data alloc]init];
Person *daveLiu = [Person object];
daveLiu.name = @"Dave Liu";
[[RKObjectManager sharedManager] postObject:daveLiu delegate:self];
}

1 个答案:

答案 0 :(得分:1)

让我们分解一下:

  

由于未捕获的异常'NSInvalidArgumentException'

而终止应用程序

好的,你有一个无效的参数异常。为什么呢?

  

原因:'+ [人物对象]:

在Person类

上调用了一个名为object的类方法
  

无法识别的选择器发送到类0x5fe6c'错误

...但是Person类没有实现object类方法。看看你的Person的实现,我们可以看到这种情况。

那么,我们从哪里调用它?快速浏览 mja的评论代码向我们展示了这一行:

Person *daveLiu = [Person object];

这可能是你的罪魁祸首。正如mja所说,这应该是

Person *daveLiu = [Person alloc] init];