Frage Inkompatibel Integer to Zeigerkonvertierung, die 'NSInteger' (aka 'int') an den Parameter 'NSInteger *' sendet (aka 'int *')


Ich versuche, eine Ganzzahl aus einem NSDictionary mithilfe des Codes 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 verwendet eine Ganzzahl als Parameter. Wenn ich zu einer Zeichenfolge analysieren möchte, [NSString stringWithFormat:@"%@", [dict valueForKeyPath:@"data_id"]] funktioniert perfekt.

Was ich hier mache ist, das Ergebnis von valueForKeyPath zu einem String zu analysieren und dann eine Ganzzahl daraus zu analysieren.


6
2018-04-10 23:53


Ursprung


Antworten:


Wie ist Ihr setData_id: Methode deklariert?

Sieht so aus als erwarte er ein NSInteger * eher als ein NSInteger...

Entweder wird es erklärt als:

- ( void )setData_id: ( NSInteger )value;

Und Sie können Ihren Code verwenden.

Ansonsten bedeutet es, dass es erklärt wird als:

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

Es könnte ein Tippfehler sein ... Wenn Sie wirklich einen Integer-Zeiger benötigen, dann können Sie diesen 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 glaube, du hast gerade einen Tippfehler gemacht und einen Zeiger hinzugefügt (NSInteger *), während du meintest NSInteger.

Hinweis: Wenn setData_id Ist eine Immobilie, gilt das Gleiche:

@property( readwrite, assign ) NSInteger data_id;

gegen:

@property( readwrite, assign ) NSInteger * data_id;

Ich schätze, du hast das zweite Beispiel geschrieben und meinst das erste ...


20
2018-04-10 23:57



Die Eigenschaft ist falsch definiert.

Es sollte sein:

@property (readwrite) NSInteger data_id;

Anstatt von

@property (readwrite) NSInteger *data_id;

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

Benutze entweder

[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 festlegen müssen, löschen Sie die [NSString stringWithFormat:@"%@"] - Dies erstellt eine Zeichenfolge.

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

4
2018-04-10 23:56



Benutzen Integer Wert und intValue gegebenenfalls.


0
2018-01-15 07:31