5

私はコアデータとiphoneプログラミングにかなり慣れていません。たぶんこれは明白な答えなので、誰かが私にチュートリアルや他のリソースを教えてくれるなら、それは大いにありがたいです!私は通貨を扱っているので10進型のコアデータエンティティを持っています、そして私が読んだすべては通貨を扱うときに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:コメントに記載されている2番目の問題の解決策を追加

(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 に送信されました」。

この問題は、10 進数を文字列に割り当てることが原因で発生します。ラベルに割り当てる前に、文字列表現を取得する必要があります。このようなもの:

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 に答える