我的根模型的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:]:无法识别的选择器已发送到实例
由于
答案 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
}