web-dev-qa-db-ja.com

NSNumberを0と比較しても機能しませんか?

アプリに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です。」と表示されます。

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

23
1789040

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

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

rating == 0

と:

[rating isEqual:@0]

@0NSNumberリテラル

または代わりに:

rating.integerValue == 0

間違ったコードがコンパイルされる理由は、00x0に等しく、それがnilに等しいためです(詳細は控えてください)。したがって、現在のコードはこれと同等になります。

rating == nil
55
Regexident

ratingはNSNumberオブジェクトへのポインターです。== 0と比較すると、ポインターのみが比較されます。

valueを0と比較する場合は、 intValue を使用して実際の値を取得する必要があります。 =、試してください;

if ([rating intValue] == 0) {
4

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

[NSNumber intValue];

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

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

3
bryanmac

次の場所から変更します。

if (rating == 0) {

if ([rating intValue] == 0) {
3
sampson-chen