我对核心数据和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"];
我在这里做错了什么? 提前谢谢!
答案 0 :(得分: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:]: 无法识别的选择器发送到实例 0x653fc80'。
此问题是由为字符串分配十进制数引起的。在将其分配给标签之前,您必须获取字符串表示。像这样:
envelopeBudgetLabel.text = [[model valueForKey:@"budget"] description];
答案 1 :(得分:3)
NSDecimalNumber
非常精确,应该精确构建:
NSDecimalNumber *budgetNumber = [NSDecimalNumber decimalNumberWithMantissa:1 exponent:0 isNegative:NO];
会给你一个NSDecimalNumber
表示1.如果你想要{-1}}表示-12.345那么它将被构造:
NSDecimalNumber