Невозможно присвоить число с плавающей точкой NSNumber - PullRequest
2 голосов
/ 09 июля 2011

У меня есть следующий код в файле 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 ]

8 голосов
/ 09 июля 2011

numberWithFloat - это метод класса, поэтому вы должны использовать его следующим образом:

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

Однако это не сработает, потому что вы присвоили неизменный NSArray своему rPricesсвойство (неизменное значение, что вы не можете изменить его).Вам нужно использовать NSMutableArray здесь.

2 голосов
/ 09 июля 2011

Кажется, вы вызываете class method для объекта.

Попробуйте изменить выражение, как показано ниже.

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

Также попробуйте изменить способ построения массива. '

self.rPrices = [[NSMutableArray alloc] initWithCapacity:2];
[self.rPrices addObjectsFromArray:[NSArray arrayWithObjects:@"1", @"2", @"3", @"4", nil]];
1 голос
/ 09 июля 2011
[NSNumber  numberWithFloat:nR4];

или

[[NSNumber alloc] initWithFloat:nR4];
0 голосов
/ 09 июля 2011

Вам не нужно инициализировать массив дважды:

-(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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...