我是 Objective-C 和 iPhone 开发的新手,我正在尝试将浮点值存储在 NSMutableArray 中,但是当我这样做时,我收到一条错误消息“'addObject 的参数 1 的类型不兼容”。我究竟做错了什么?我正在尝试创建一个可以用来执行数学计算的双精度数组。

有帮助吗?

解决方案

的NSMutableArray仅保持对象,所以要与NSNumber的对象被加载的阵列。 创建每个NSNumber的握住你的双然后将其添加到您的阵列。也许是这样的。

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 中包装许多其他数据类型,请检查 文档. 。还有 NS值 对于一些结构,如 NSPoint 和 NSRect。

在可可,所述的NSMutableDictionary(和所有集合,真的)需要对象作为值,所以不能简单地传递任何其它数据类型。由于两个sjmulder和Ryan建议,您可以在其他对象的NSNumber(对数)和NSValue的情况下,包装你的标值。

如果您代表的是十进制数,这样的事情有代价的,我也建议寻找和使用的 NSDecimalNumber 。然后,您就可以避免浮点不准确的问题,你通常可以使用和存放“值”为的 NSDecimalNumber 代替代码与原始的代表它。

例如:

// somewhere
NSDecimalNumber* price = [[NSDecimalNumber decimalNumberWithString:@"3.50"] retain];
NSMutableArray*  prices= [[NSMutableArray array] retain];

// ...

[prices addObject:price];
NSMutableArray *muArray = [[NSMutableArray alloc] init];
NSNumber *float = [NSNumber numberWithFloat:210.0f];
NSNumber *float1 = [NSNumber numberWithFloat:211.0f];
[muArray addObject:float];
[muArray addObject:float1];

NSlog(@"my array is--%@",muArray);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top