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.
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 ...
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]];
Verwenden Sie ggf. integerValue und intValue .