23

アプリに JSON パーサーがあり、値を detailDataSourceDict 変数に読み込みます。配列の valueForKey を取得して 0 と比較しようとすると、うまくいきません...

これが私のコードです:

if (indexPath.row == 1) {
    NSNumber *rating = [detailDataSourceDict valueForKey:@"rating"];
    NSLog(@"Rating:  %@",rating);
    if (rating == 0) {
        cell.detailTextLabel.text = @"This sheet has not yet been rated.";
    }
    else {
        cell.detailTextLabel.text = [NSString stringWithFormat:@"This sheet has a %@ star rating.",rating];
    }
    cell.textLabel.text = @"Rating";


}

JSON フィードに "rating":"0" と表示されますが、評価が 0 の場合、"このシートはまだ評価されていません" ではなく、"このシートの星評価は 0 です" と表示されます。

助言がありますか?ありがとう。

4

4 に答える 4

60

NSNumber *ratingはオブジェクトです。0プリミティブ型です。プリミティブ型は と比較できます==。オブジェクトはできません。を使用して等しいかどうかを比較する必要がありますisEqual:

したがって、これを置き換えます:

rating == 0

と:

[rating isEqual:@0]

( @0NSNumberリテラル)

または代わりに:

rating.integerValue == 0

間違ったコードがコンパイルされる理由は、それ0が等しいこと0x0と、次に等しいことですnil(一種の詳細を節約します)。したがって、現在のコードは次のようになります。

rating == nil
于 2012-11-17T15:41:38.997 に答える
4

ratingは NSNumber オブジェクトへのポインター== 0です。 と比較すると、ポインターのみを比較することになります。

を 0と比較したい場合は、 を使用して実際の値を取得する必要がありますintValue

if ([rating intValue] == 0) {
于 2012-11-17T15:41:37.983 に答える
4

NSNumber はオブジェクトであり、値アクセサーを使用してその値にアクセスする必要があります。

[NSNumber intValue];

「数値へのアクセス」を参照してください @:

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/Reference/Reference.html

于 2012-11-17T15:41:45.540 に答える
3

次のように変更します。

if (rating == 0) {

if ([rating intValue] == 0) {
于 2012-11-17T15:44:31.673 に答える