无法为NSNumber分配浮点数

时间:2011-07-09 10:44:28

标签: iphone objective-c xcode4

我的根模型的m文件中有以下代码:

-(id)init {
    if(self == [super init]) {
        self.rPrices = [[NSMutableArray alloc]init];
        self.rPrices = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", nil];
}
    return self;
}

-(void)saveData:(NSMutableData *)data toFile:(NSString *)file {
float nR4;
nR4 = (some calculations ......)

[self.rPrices addObject:[[NSNumber alloc] numberWithFloat:nR4]];

}

尝试添加对象时出现以下错误: 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [NSPlaceholderNumber numberWithFloat:]:无法识别的选择器已发送到实例

由于

4 个答案:

答案 0 :(得分:8)

numberWithFloat是一个类方法,所以你必须像这样使用它:

[self.rPrices addObject:[NSNumber numberWithFloat:nR4]];

但这不起作用,因为您已为您的NSArray属性分配了一个不可变rPrices(不可变意味着您无法修改它)。您需要在此使用NSMutableArray

答案 1 :(得分:2)

看来,你在对象上调用class method

尝试更改以下语句。

[self.rPrices addObject:[NSNumber numberWithFloat:nR4]];

同时尝试更改构建阵列的方式。'

self.rPrices = [[NSMutableArray alloc] initWithCapacity:2];
[self.rPrices addObjectsFromArray:[NSArray arrayWithObjects:@"1", @"2", @"3", @"4", nil]];

答案 2 :(得分:1)

[NSNumber  numberWithFloat:nR4];

[[NSNumber alloc] initWithFloat:nR4];

答案 3 :(得分:0)

您无需初始化数组两次:

-(id)init { 
    self = [super init];

if (self != nil) { 
          //self.rPrices = [[NSMutableArray alloc]init]; //this does not need 
          rPrices = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", @"4", nil]; 
        } 
        return self; 
}


-(void)saveData:(NSMutableData *)data toFile:(NSString *)file {
    float nR4; 
    nR4 = (some calculations ......)
    [self.rPrices addObject:[NSNumber numberWithFloat:nR4]];//This return an autoreleased OBJ so you don't need to call alloc

}