アプリに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です。」と表示されます。
助言がありますか?ありがとう。
NSNumber *rating
はオブジェクトです。 0
はプリミティブ型です。プリミティブ型は==
と比較できます。オブジェクトはできません。 isEqual:
を使用して、それらが等しいかどうかを比較する必要があります。
したがって、これを置き換えます。
rating == 0
と:
[rating isEqual:@0]
(@0
は NSNumberリテラル )
または代わりに:
rating.integerValue == 0
間違ったコードがコンパイルされる理由は、0
が0x0
に等しく、それがnil
に等しいためです(詳細は控えてください)。したがって、現在のコードはこれと同等になります。
rating == nil
rating
はNSNumberオブジェクトへのポインターです。== 0
と比較すると、ポインターのみが比較されます。
valueを0と比較する場合は、 intValue
を使用して実際の値を取得する必要があります。 =、試してください;
if ([rating intValue] == 0) {
NSNumberはオブジェクトであり、値アクセサーを使用してその値にアクセスする必要があります。
[NSNumber intValue];
「数値へのアクセス」@を参照してください。
次の場所から変更します。
if (rating == 0) {
に
if ([rating intValue] == 0) {