web-dev-qa-db-fra.com

Conversion entier incompatible en pointeur envoyant 'NSInteger' (alias 'int') au paramètre de type 'NSInteger *' (alias 'int *')

J'essaie d'analyser un entier depuis un NSDictionary en utilisant le code 

[activeItem setData_id:[[NSString stringWithFormat:@"%@", [dict valueForKeyPath:@"data_id"]] integerValue]];

Cependant, cela me donne cette erreur: Incompatible integer to pointer conversion sending 'NSInteger' (aka 'int') to parameter of type 'NSInteger *' (aka 'int *')

setData_id prend un entier comme paramètre. Si je veux analyser une chaîne, [NSString stringWithFormat:@"%@", [dict valueForKeyPath:@"data_id"]] fonctionne parfaitement. 

Ce que je fais ici, c'est d'analyser le résultat de valueForKeyPath en une chaîne, puis d'analyser un entier à partir de cela.

8
JamEngulfer

Comment votre méthode setData_id: est-elle déclarée?

On dirait qu'il faut s'attendre à un NSInteger * plutôt qu'à une NSInteger...

Soit il est déclaré comme:

- ( void )setData_id: ( NSInteger )value;

Et vous pouvez utiliser votre code.

Sinon, cela signifie qu'il est déclaré comme:

- ( void )setData_id: ( NSInteger * )value;

C'est peut-être une faute de frappe ... Si vous avez vraiment besoin d'un pointeur entier, vous pouvez alors utiliser (en supposant que vous savez ce que vous faites en termes de portée):

NSInteger i = [ [ NSString stringWithFormat: @"%@", [ dict valueForKeyPath: @"data_id" ] ] integerValue ];
[ activeItem setData_id: &i ];

Mais je pense que vous venez de faire une faute de frappe, en ajoutant un pointeur (NSInteger *), alors que vous vouliez dire NSInteger.

Remarque: Si setData_id est une propriété, la même chose s'applique:

@property( readwrite, assign ) NSInteger data_id;

contre:

@property( readwrite, assign ) NSInteger * data_id;

Je suppose que vous avez écrit le deuxième exemple, tout en voulant dire le premier ...

22
Macmade

La propriété n'est pas définie correctement.

CA devrait etre:

@property (readwrite) NSInteger data_id;

au lieu de

@property (readwrite) NSInteger *data_id;

Vous tentez de transmettre une valeur entière à un format censé avoir un type de pointeur.

Soit utiliser

[activeItem setData_id:[NSString stringWithFormat:@"%@", [dict valueForKeyPath:@"data_id"]]];

ou

[activeItem setData_id:[NSString stringWithFormat:@"%d", [[dict valueForKeyPath:@"data_id"] integerValue]]];

Si vous devez définir un entier, supprimez le [NSString stringWithFormat:@"%@"] - cela crée une chaîne.

[activeItem setData_id:[[dict valueForKeyPath:@"data_id"] integerValue]];
4
Leo Natan

Utilisez integerValue et intValue le cas échéant. 

0
zeeawan