RESTkit erreur de sélection non reconnu
Question
Je suis en train d'ajouter une classe de personne via iPhone à mon serveur.
Je le code suivant et je reçois cette erreur:
* Mettre fin à l'application du fait exception uncaught 'NSInvalidArgumentException', raison: '+ [objet personne]: sélecteur non reconnu envoyé à la classe 0x5fe6c' erreur
@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];
}
La solution
pause Let vers le bas:
Mettre fin à l'application du fait exception uncaught 'NSInvalidArgumentException'
OK, vous avez une exception d'argument non valide. Pourquoi?
raison: « + [objet personne]:
Une méthode de classe appelée object
a appelé la classe Person
sélecteur non reconnu envoyé à la classe 0x5fe6c » erreur
... mais la classe Personne ne met pas en œuvre la méthode de classe object
. En regardant votre mise en œuvre de la personne, nous pouvons voir que tel est le cas.
Alors, où allons-nous appeler cela de? Une analyse rapide par Commentaires de MJA le code nous montre cette ligne:
Person *daveLiu = [Person object];
Ce qui est probablement votre coupable. Comme le dit MJA, cela devrait probablement être
Person *daveLiu = [Person alloc] init];