NSDecimalNumber вопрос для основных данных и iPhone - PullRequest
5 голосов
/ 06 марта 2011

Я довольно плохо знаком с основными данными и программированием для iphone.Возможно, это очевидный ответ, поэтому, если кто-то может указать мне учебник или другой ресурс, это очень ценится!У меня есть базовый объект данных, который имеет десятичный тип, поскольку он имеет дело с валютой, и все, что я прочитал, говорит об использовании NSDecimalNumber при работе с валютой.При этом, я не могу понять, как установить значение при вставке нового объекта.Вот что у меня есть

NSManagedObjectContext *moc = [self.fetchedResultsController managedObjectContext];
Envelope *envelope = [NSEntityDescription insertNewObjectForEntityForName:@"Envelope"
                                                inManagedObjectContext:moc];
[envelope setValue:@"Envelope 1" forKey:@"name"];
NSDecimalNumber *budgetNumber = [NSDecimalNumber decimalNumberWithDecimal:1.00];
[envelope setValue:budgetNumber forKey:@"budget"];

Что я тут не так делаю?заранее спасибо!

Ответы [ 2 ]

5 голосов
/ 07 марта 2011

Попробуйте это:

NSDecimalNumber *budgetNumber = [NSDecimalNumber decimalNumberWithString:@"1.00"];

PS: добавление решения для второй проблемы, указанной в комментариях

(void)configureCell:(UITableViewCell *)cell withEnvelope:(NSManagedObject *)model{ 
     UILabel *envelopeNameLabel = (UILabel *) [cell viewWithTag:1];

     envelopeNameLabel.text = [model valueForKey:@"name"]; 

     UILabel *envelopeBudgetLabel = (UILabel *) [cell viewWithTag:2];
     envelopeBudgetLabel.text = [model valueForKey:@"budget"];
     }

«NSInvalidArgumentException», причина: '- [NSDecimalNumber isEqualToString:]: нераспознанный селектор отправлен на экземпляр 0x653fc80 '.

Эта проблема вызвана назначением десятичного числа в строку. Вы должны получить строковое представление, прежде чем назначить его метке. Примерно так:

envelopeBudgetLabel.text = [[model valueForKey:@"budget"] description];
3 голосов
/ 08 марта 2011

NSDecimalNumber очень точный и должен быть построен точно:

NSDecimalNumber *budgetNumber = [NSDecimalNumber decimalNumberWithMantissa:1 exponent:0 isNegative:NO];

Даст вам NSDecimalNumber представление 1. Если вы хотели бы NSDecimalNumber представление -12.345, тогда это было быпостроено:

NSDecimalNumber *budgetNumber = [NSDecimalNumber decimalNumberWithMantissa:12345 exponent:-3 isNegative:YES];
...