我正在尝试使用代码
解析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,然后从中解析整数。
答案 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 。