不兼容的整数到指针转换发送' NSInteger' (又名' int')参数类型' NSInteger *' (又名' int *')

时间:2014-04-10 23:53:55

标签: ios objective-c nsdictionary

我正在尝试使用代码

解析NSDictionary中的整数

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

但是,这给了我这个错误:Incompatible integer to pointer conversion sending 'NSInteger' (aka 'int') to parameter of type 'NSInteger *' (aka 'int *')

setData_id采用整数作为参数。如果我想解析为字符串,[NSString stringWithFormat:@"%@", [dict valueForKeyPath:@"data_id"]]完美无缺。

我在这里做的是将valueForKeyPath的结果解析为String,然后从中解析整数。

3 个答案:

答案 0 :(得分:22)

您的setData_id:方法是如何声明的?

看起来期待NSInteger *而不是NSInteger ...

要么声明为:

- ( void )setData_id: ( NSInteger )value;

您可以使用您的代码。

否则,表示声明为:

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

这可能是一个错字......如果你真的需要一个整数指针,那么你可以使用(假设你知道你在范围方面做了什么):

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

但我认为你只是输了一个错字,添加了一个指针(NSInteger *),而你的意思是NSInteger

注意:如果setData_id是属性,则同样适用:

@property( readwrite, assign ) NSInteger data_id;

@property( readwrite, assign ) NSInteger * data_id;

我猜你写了第二个例子,虽然意思是第一个例子......

答案 1 :(得分:4)

该属性定义不正确。

应该是:

@property (readwrite) NSInteger data_id;

而不是

@property (readwrite) NSInteger *data_id;

您正在尝试将整数值传递给期望具有指针类型的格式。

使用

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

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

如果您需要设置一个整数,请删除[NSString stringWithFormat:@"%@"] - 这会创建一个字符串。

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

答案 2 :(得分:0)

在适当的位置使用 integerValue intValue