1

私はiPhone開発に慣れていないので、これはおそらく本当にばかげた質問のように思えますが、計算値をコアデータに保存するにはどうすればよいですか?

背景 このプログラムは、ユーザーがテキストフィールドに入力した内容から値を計算するだけです。私はNSStringsとしてデータ型を持っており、コアデータに保存すると、すべてが正常に機能します。NSStringsをfloatにキャストし、適切な数学演算を実行して、最終的な計算値を算出します。この最終値はテキストフィールドに出力されませんが、コアデータに保存されます。同じ行で次の2つのエラーが発生し続けます:*「互換性のないタイプ「NSString のパラメーターに「double」を渡す」および「互換性のないタイプ「double」から「NSString*」に割り当てる」。(10行目はこれらのメッセージが含まれています)

1     float dollar1 = [self.dataModel.price          floatValue];
2     float P1      = [self.dataModel.percentage     floatValue];
3     float dollar2 = [self.dataModel.price          floatValue];
4     float P2      = [self.dataModel.percentage2    floatValue];

5     float totalPrice = dollar1 + dollar2;
6     float totalPercentage = (P1 + P2) / 100;

7     double finalPrice = round(totalPrice / totalPercentage);

8     //Set final price to save in core data
9     NSLog(@"setting finalPrice to core data slot");
10    dataModel.finalPrice = finalPrice;

*このコードを投稿する直前に、7行目を次のように変更してみました

NSString finalPrice = totalPrice / totalPercentage;

これにより、10行目の上記のエラーはなくなりましたが、7行目のエラーが発生しました:「インターフェイスタイプを静的に割り当てることはできません。」これはすっごく紛らわしいです。他のすべてのテキストフィールドがコアデータに保存される理由はわかりませんが、この計算されたテキストフィールドは保存されません。あなたたちが私に与えることができるどんな助けでも大いに感謝されるでしょう。:)

編集 それで、私は今NSLog(@"%@", dataModel.finalPrice);、私が設定したものから実際に数値を取得していますが、値はwayyyyyオフです。計算が正しく行われているようには見えません。

1     int dollar1 = [self.dataModel.price          intValue];
2     int P1      = [self.dataModel.percentage     intValue];
3     int dollar2 = [self.dataModel.price2          intValue];
4     int P2      = [self.dataModel.percentage2    intValue];

5     int totalPrice = dollar1 + dollar2;
6     int totalPercentage = P1 + P2;

7     int finalPrice = totalPrice / ((double)totalPercentage);
8     NSDecimalNumber *finalFinalPrice = [[NSDecimalNumber alloc]initWithDouble:finalPrice];

9     //Set final price to save in core data
10     NSLog(@"setting finalPrice to core data slot");
11    dataModel.finalPrice = finalFinalPrice;

これらのNSLogを追加して、コアデータに何が保存されているかを確認しました

NSLog(@"%@", dataModel.price);
NSLog(@"%@", dataModel.percentage);    
NSLog(@"%@", dataModel.price2);
NSLog(@"%@", dataModel.percentage2);
NSLog(@"%@", dataModel.finalPrice);

すべてが大丈夫なようですが、たとえば、私が持っている場合:

3.62 = dollar1;
2.2  = P1;
5.30 = dollar2;
.21  = P2;
totalPrice = dollar1 + dollar2; <--this should equal 8.92
totalPercentage = P1 + P2; <--this should equal 2.41
finalPrice = totalPrice / totalPercentage; <--- this should equal 3.70

ただし、NSLogへの出力には、-2147483648の値が表示されます。それは世界のどこから来ているのですか?

編集 私はそれを保存するためにそれを手に入れました!これが私がしたことです:

1     NSString dollar1 = self.dataModel.price.text;
2     NSString P1      = self.dataModel.percentage.text;
3     NSString dollar2 = self.dataModel.price.text;
4     NSString P2      = self.dataModel.percentage2.text;   

5     double Dollar1 = [dollar1 doubleValue];
6     double Dollar2 = [dollar2 doubleValue];
7     double p1 = [P1 doubleValue];
8     double p2 = [P2 doubleValue];

9     double totalDollar = Dollar1 + Dollar2;
10      double totalP = p1 + p2;

11    double finalPrice = totalDollar / totalP;
      NSString *finalFinalPrice = [[NSString alloc] initWithFormat:@".2f", finalPrice];

12     //Set final price to save in core data
13     NSLog(@"setting finalPrice to core data slot");
14    dataModel.finalPrice = finalFinalPrice;

わお。これはやっかいでした。最終的な解決策がとても単純だったなんて信じられません!あなたのご親切に感謝します!!

4

1 に答える 1

1

float値をとして保存する場合はNSStringstringWithFormat:

...
double finalPrice = round(totalPrice / totalPercentage);
NSString *finalPriceString = [NSString stringWithFormat:@"%0.2f", finalPrice];

dataModel.finalPrice = finalPriceString;

編集

あなたの訂正:

NSString finalPrice = totalPrice / totalPercentage;

いくつかの問題があります。まず、エラーInterface type cannot be statically allocatedは、NSStringsを(ポインタとして)動的に割り当てる必要があり、ポインタタイプ(NSString *)を使用していないという事実に起因します。

次に、totalPricetotalPercentagefloat値であり、それらを分割してNSString、非常に異なるタイプのデータであるに設定します。

于 2012-07-12T23:10:29.087 に答える