2

私はobjective-cを初めて使用し、intをNSNumberに変換してCore-Dataに保存できるようにしようとしています。

私は次のコードを持っています(インデックスはNSIntegerです)

- (void) associateOrNotToARoutine:(NSString*)exerciseName associate:(BOOL)associate index:(NSInteger)index

NSLog(@"number w index %d, %d",[NSNumber numberWithInteger:index],index);

そしてそれは戻ってきます

number w index 170413600, 2

2 の int を数値 2 に変換する必要があり、他のすべての数値を正しい数値に変換する必要があります...なぜこの変換が行われるのか誰か教えてもらえますか? マニュアルを読んでNSNumberみましたが、何も見つかりませんでした

4

3 に答える 3

8

試す:

NSLog(@"number w index %@, %d",[NSNumber numberWithInteger:index],index);
                       ^^

%@フォーマット指定子はメソッドを呼び出します。メソッド[NSNumber description]は、目的の値を返す必要があります。元のコードは、NSNumberオブジェクトの内容ではなく、オブジェクトのアドレスを返します。

于 2013-05-19T08:49:05.730 に答える
4

この質問はすでに回答されていますが、将来の一般的な読者のために、より長い回答を具体化すると思いました。

何が起こっていますか?渡されたパラメーターの 1 つが整数 ( ) ivar 値であることを示すために使用さ
%dれるC 形式の文字列です。int値にはlike%fが使用されfloatます。

[NSNumber numberWithInteger:index]NSNumber インスタンスへのポインターを返します。を使用する%dと、実際にはポインターを渡しているときに、NSLog は整数を渡していると見なします。そのため、ポインタ値 (メモリ アドレス) が出力されます。

なに%@
trojanfoe: で述べたように%@NSLog()オブジェクトを渡していることを示します。その場合、NSLog は、文字列を使用してそれ自体を説明するようにオブジェクトに要求し、descriptionメソッドを呼び出します。

具体的な回答
この具体的な質問には、複数の方法があります。主なものは次の 2 つです。

  • NSLog(@"number w index %@, %d", [NSNumber numberWithInteger:index], index);
  • NSLog(@"number w index %d, %d", [[NSNumber numberWithInteger:index] intValue], index);

特別
な利点 を使用する場合%@、渡されるオブジェクトはdescription、基本的に NSObject の子孫である に応答するものであれば何でもかまいません。また、独自のクラスを作成している場合descriptionは、デフォルトの NSObject 実装よりも意味のある文字列を返すようにオーバーロードすることをお勧めします。

// Try using it with NSArray or NSDictionary and see how each describe themselves.
NSLog(@"the array description: %@", myArray);
NSLog(@"the dictionary description: %@", myDictionary);
于 2013-05-20T01:13:13.420 に答える
2

使用する必要があります。

[[NSNumber numberWithInteger:index] intValue] 

保持している NSNumber の整数値を取得する

于 2013-05-19T09:00:00.587 に答える