webentwicklung-frage-antwort-db.com.de

Inkompatible Integer-zu-Zeiger-Konvertierung, die 'NSInteger' (aka 'int') an Parameter vom Typ 'NSInteger *' (aka 'int *') sendet

Ich versuche, eine Ganzzahl aus einem NSDictionary mit dem Code zu analysieren 

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

Dies gibt mir jedoch diesen Fehler: Incompatible integer to pointer conversion sending 'NSInteger' (aka 'int') to parameter of type 'NSInteger *' (aka 'int *')

setData_id nimmt eine Ganzzahl als Parameter. Wenn ich eine Zeichenfolge analysieren möchte, funktioniert [NSString stringWithFormat:@"%@", [dict valueForKeyPath:@"data_id"]] perfekt. 

Was ich hier mache, ist das Parsen des Ergebnisses von valueForKeyPath in einen String und dann das Analysieren einer Ganzzahl von diesem.

8
JamEngulfer

Wie wird Ihre setData_id:-Methode deklariert?

Sieht aus, als würde es einen NSInteger * erwarten, anstatt eine NSInteger...

Entweder wird es erklärt als:

- ( void )setData_id: ( NSInteger )value;

Und Sie können Ihren Code verwenden.

Ansonsten bedeutet es, dass es deklariert ist als:

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

Es könnte ein Tippfehler sein ... Wenn Sie wirklich einen Integerzeiger benötigen, können Sie Folgendes verwenden (vorausgesetzt, Sie wissen, was Sie in Bezug auf den Umfang tun):

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

Aber ich denke, Sie haben gerade einen Tippfehler gemacht und einen Zeiger (NSInteger *) hinzugefügt, während Sie NSInteger gemeint haben.

Hinweis: Wenn setData_id eine Eigenschaft ist, gilt dasselbe:

@property( readwrite, assign ) NSInteger data_id;

gegen:

@property( readwrite, assign ) NSInteger * data_id;

Ich denke, Sie haben das zweite Beispiel geschrieben, während es das erste bedeutet ...

22
Macmade

Die Eigenschaft ist falsch definiert.

Es sollte sein:

@property (readwrite) NSInteger data_id;

anstatt

@property (readwrite) NSInteger *data_id;

Sie versuchen, einen ganzzahligen Wert an ein Format zu übergeben, das einen Zeigertyp erwartet.

Entweder verwenden

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

oder

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

Wenn Sie eine Ganzzahl setzen müssen, löschen Sie den [NSString stringWithFormat:@"%@"] - dadurch wird eine Zeichenfolge erstellt.

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

Verwenden Sie ggf. integerValue und intValue

0
zeeawan