30

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

4

4 回答 4

63

NSMutableArray 仅保存对象,因此您希望使用 NSNumber 对象加载数组。创建每个 NSNumber 以保存您的双精度,然后将其添加到您的数组中。也许是这样的。

NSMutableArray *array = [[NSMutableArray alloc] init];
NSNumber *num = [NSNumber numberWithFloat:10.0f];
[array addObject:num];

根据需要重复。

于 2009-01-29T22:55:15.937 回答
12

使用 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

于 2009-01-29T22:52:34.710 回答
7

在 Cocoa 中,NSMutableDictionary(以及所有的集合,真的)需要对象作为值,所以你不能简单地传递任何其他数据类型。正如 sjmulder 和 Ryan 所建议的那样,您可以将标量值包装在 NSNumber(用于数字)和 NSValue 用于其他对象的实例中。

如果您代表十进制数字,例如价格,我建议您也查看和使用NSDecimalNumber。然后,您可以避免浮点不准确问题,并且通常可以将“值”作为NSDecimalNumber使用和存储,而不是用代码中的原语表示它。

例如:

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

// ...

[prices addObject:price];
于 2009-01-29T23:03:06.110 回答
1
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);
于 2014-05-22T07:00:57.640 回答