我是Objective-C和iPhone开发的新手,我正在尝试在NSMutableArray中存储浮点值,但是当我这样做时,我得到一个错误,说"addObject的参数1的不兼容类型".我究竟做错了什么?我正在尝试创建一个双打数组,我可以用它来执行数学计算.
NSMutableArray只保存对象,因此您希望使用NSNumber对象加载数组.创建每个NSNumber以保存您的double然后将其添加到您的阵列.也许是这样的.
NSMutableArray *array = [[NSMutableArray alloc] init]; NSNumber *num = [NSNumber numberWithFloat:10.0f]; [array addObject:num];
根据需要重复.
使用NSNumber来包装你的浮点数,因为字典需要一个对象:
[myDictionary setObject:[NSNumber numberWithFloat:0.2f] forKey:@"theFloat"]; /* or */ [myDictionary setObject:@0.2f forKey:@"theFloat"];
通过发送floatValue来检索它:
float theFloat = [[myDictionary objectForKey:@"theFloat"] floatValue];
代码未经测试.
您也可以在NSNumber中包装许多其他数据类型,请查看文档.对于像NSPoint和NSRect这样的结构,还有NSValue.
在Cocoa中,NSMutableDictionary(以及所有集合)确实需要将对象作为值,因此您不能简单地传递任何其他数据类型.正如sjmulder和Ryan所建议的那样,您可以将标量值包装在NSNumber(对于数字)和NSValue的实例中以用于其他对象.
如果你代表一个十进制数字,对于类似价格的东西,我建议你也看一下并使用NSDecimalNumber.然后,您可以避免浮点不准确问题,并且通常可以使用并将"值"存储为NSDecimalNumber,而不是使用代码中的基元来表示它.
例如:
// somewhere NSDecimalNumber* price = [[NSDecimalNumber decimalNumberWithString:@"3.50"] retain]; NSMutableArray* prices= [[NSMutableArray array] retain]; // ... [prices addObject:price];