19

これは本当に単純なことだと思いますが、辞書に保存したintを取得しようとしています。使用している行は、これです。

 int mapX = [NSNumber numberWithInt:[templateObject valueForKey:@"mapX"]];

しかし、それは私にエラーを与えています...

タイプ「int」のパラメータに「id」を送信する整数変換への互換性のないポインタ

タイプ「NSNumber*」の式で「int」を初期化する整数変換への互換性のないポインタ。

やってみたら...

NSNumber *mapX = [NSNumber numberWithInt:[templateObject valueForKey:@"mapX"]];

基本的に同じエラーが発生します。おそらく間違った構文を使用していることはわかっていますが、他にどのように書くかはわかりません。

助けてくれてありがとう。

4

4 に答える 4

44

いくつかのポイント:

  • [NSNumber numberWithInt:[templateObject valueForKey:@"mapX"]];

    NSNumber*intに格納しようとしているを返します。

  • NSNumber* mapX = [NSNumber numberWithInt:[templateObject valueForKey:@"mapX"]];

    ではないため、どちらも機能し[templateObject valueForKey:@"mapX"]ませんintNSDictionaryオブジェクトは、プリミティブ型ではなく、にのみ格納できます。

あなたは試してみたいかもしれません(私が正しいタイプを持っていると仮定して)

NSNumber* mapXNum = [templateObject valueForKey:@"mapX"];
int mapX = [mapXNum intValue];
于 2012-11-05T18:38:52.390 に答える
1
int mapX = [NSNumber numberWithInt:[templateObject valueForKey:@"mapX"]];

ただし、2 つの理由で意味がありません (少し考えてみてください)。

NSNumber *mapX = [NSNumber numberWithInt:[[templateObject valueForKey:@"mapX"] intValue]];

またはインスタンス[templateObject valueForKey:@"mapX"]のいずれかであると仮定して動作するはずです。NSNumberNSString

于 2012-11-05T18:39:21.987 に答える
0

2 つの問題があります。まず、ではなく、Objective-C オブジェクトへのポインターである を[templateObject valueForKey:@"mapX"]返します。また、メソッドはパラメーターを受け取るため、 を に変換しようとするとエラーになります。idint-[NSNumber numberWithInt:]intidint

[NSNumber numberWithInt:...]2 番目の問題は、 の結果をに変換しようとすることですint。これも同じ問題です。オブジェクト-[NSNumber numberWithInt:]へのポインタを返しますが、これは ではありません。NSNumberint

辞書に格納されている値が実際に であると仮定すると、NSNumber本当にやりたいことは次のとおりです。

NSNumber *mapXObj = [templateObject valueForKey:@"mapX"];  // Implicit cast from id to NSNumber*
int mapX = [mapXObj intValue];

またはより簡潔に:

int mapX = [[templateObject valueForKey:@"mapX"] intValue];
于 2012-11-05T18:46:08.363 に答える