5

我对核心数据和 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"];

我在这里做错了什么?提前致谢!

4

2 回答 2

5

试试这个:

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:]: unrecognized selector sent to instance 0x653fc80'。

此问题是由为字符串分配十进制数引起的。您必须先获取字符串表示形式,然后再将其分配给标签。像这样的东西:

envelopeBudgetLabel.text = [[model valueForKey:@"budget"] description];
于 2011-03-06T23:45:39.590 回答
3

NSDecimalNumber非常精确,应该精确构造:

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

会给你一个NSDecimalNumber1 的表示。如果你想要一个NSDecimalNumber-12.345 的表示,那么它将被构造:

NSDecimalNumber *budgetNumber = [NSDecimalNumber decimalNumberWithMantissa:12345 exponent:-3 isNegative:YES];
于 2011-03-08T08:43:39.780 回答