1

NSDictionaryを使用して受け取りますAFNetworking。その辞書には多くの値があります。

INTこれらの 1 つはorだと思いますがNSNumber、自動変換とは何かわかりません。予想される数字は 2 と 3 ですが、どういうわけか常に非常に長い数字を取得します... 知っていることと見つけることができるすべてのことを試しましたが、正しい数字を表示することができません

cell.numberOfLikes.text

これらは私が試したすべてのことであり、成功しませんでした。いくつかのガイダンスをいただければ幸いです

NSLog(@"%i",_myDownloadedInfo[@"routines"][indexPath.row][@"routine"][@"routineDownloads"]);

   NSLog(@"%i",[NSNumber numberWithInt:_myDownloadedInfo[@"routines"][indexPath.row][@"routine"][@"routineDownloads"]]);

    cell.numberOfDownloads.text = [NSString stringWithFormat:@"%i",_myDownloadedInfo[@"routines"][indexPath.row][@"routine"][@"routineDownloads"]]; 

cell.numberOfLikes.text =_myDownloadedInfo[@"routines"][indexPath.row][@"routine"][@"routineDownloads"]);
4

3 に答える 3

4

指定された%i形式は、基本的な整数データ型用です。NSNumberオブジェクトを持っている (または作成しようとしている) ため、 を使用%@してログに記録できます。%@フォーマット指定子で Objective-C オブジェクトに使用されます。

NSNumberしかし、テキスト フィールドにを割り当てたい場合には役に立ちません。数値を に変換する必要がありNSStringます。NSNumberFormatterを に変換するにはNSNumber、を使用するのが理想的ですNSString

これを行う:

NSNumber *likesNumber = _myDownloadedInfo[@"routines"][indexPath.row][@"routine"][@"routineDownloads"];
NSString *numberText = [NSString stringWithFormat:@"%d". [likesNumber intValue]];
NSLog(@"Number: %@", numberText);
cell.numberOfLikes.text = numberText;
于 2013-06-04T20:26:35.347 に答える
1

数点。

  • まず、NSLog の最初の引数は書式指定子です。で使用されるフォーマット指定子と完全に同等で[NSString stringWithFormat:]あり、両方が必要になることはめったにありません。
  • 次に、Objective-C のデータは、個々のint値、char値、char*値 (C 文字列)、float 値、および Objective-C オブジェクト値にすることができます。(さらに、めったに使用しないいくつかのさまざまな long 値、unsigned 値など。)
  • NSString は、NSNumber と同様に、Objective-C オブジェクトです。一方、NSInteger は の特定のサイズのエイリアスでありint、一般に と交換可能intです。NSNumber (オブジェクト) と NSInteger (スカラー int) を混同することが非常によくあります。これらは同じではありません
  • NSLog または stringWithFormat 指定子%では、値 (次の値のリスト) をどのようにフォーマットするかを示すために、1 つ以上の文字を続けて使用します。 %dまたは%iですint。(%dが推奨されます。) %fは単純な浮動小数点値です (ただし、これらのフォーマットはより複雑になる可能性があります)。 %sC スタイルの文字列 (つまり、char*値) です。 %@Objective-C オブジェクトのフォーマットに使用されます。%@特に、NSString または (デフォルトのプレゼンテーションを取得するために) NSNumber をフォーマットするために を使用します。

%@がフォーマット文字列でどのように機能するかを理解することが重要です。フォーマット インタープリターがそれを検出すると、値リストの次の項目を Objective-C オブジェクトへのポインターとして解釈し、descriptionそのオブジェクトのメソッドを呼び出します。NSString は の結果としてそれ自体を返すだけですがdescription、NSNumber は数値の値の文字表現を表す NSString を返します。その他のオブジェクト (すべての Objective-C オブジェクトdescriptionは、デフォルトでのみ をサポートします) は、オブジェクト タイプの単純な識別またはオブジェクトの内部値の表現のいずれかを返します。

したがって、NSNumber がある場合は、 で直接フォーマットする%@か、数値を抽出して (例: [someNSNumber intValue])、その値を適切にフォーマットすることができます (例: %d)。後者を使用する理由は、数値の列幅を指定する場合 (たとえば、%5d数値を 5 桁のフィールドにフォーマットする場合) です。

さまざまなフォーマット指定子の (血まみれの) 詳細については、こちらを参照してください。

于 2013-06-04T20:58:16.013 に答える
0

ヒント:%iは の変換指定子ですint

これらの 1 つは INT または NSNumber だと思います。自動変換とは何かわかりません

戻って のドキュメントを読み、NSArrayを含むことができるかどうかを考えてから、int読み進めてください。


したがって、辞書内のオブジェクトはのインスタンスですNSNumber->それらはObjective-Cオブジェクトです->それらはポインターを使用して実装されます。ポインターNSLog()値を整数に変換しようとします。%@数値の説明を取得するために使用するか%i[theNumber intValue]その整数値を出力するために使用します。

于 2013-06-04T20:25:57.010 に答える