2012-02-12 16 views
8

辞書オブジェクトにアクセスしようとしています。私のコードは次のとおりです:NSDictionaryキーとしてintを使用していますか?

int tag = object.tag; 
CGPoint point = [[self.dict objectForKey:tag] CGPointValue]; 

問題はobjectForKeyはintではなくObjective-Cオブジェクトを取ることになっています。私は[NSNumber numberWithInt:tag]とNSNumberにタグをラップして、それをobjectForKey:に渡しましたが、nullオブジェクトを返します。

アイデア?ありがとう

+3

あなたがself.dict' 'にオブジェクトを入れましたか:

NSMutableDictionary *myDict = [[NSMutableDictionary alloc] init]; NSNumber *key = @1; id *myObject = [your code here]; myDict[key] = myObject; 

検索が簡単ですと

んが、警告は、しかし、作成されていない(とコードはとして意図作品)最初の場所? – mattjgalloway

+0

initWithObjectsAndKeys:[NSValue valueWithCGPoint:CGPointMake(1,2)]、@ "100"など。私の辞書はうまくいますが、私はfor-inを使ってコードの他の部分にアクセスしています。 self.dict)ループ。しかし、この例では私はループを使いたくありません。ありがとう、 – user339946

答えて

13

辞書キーの文字列として数字を使用している場合は、intNSStringまたはNSNumberに変換して辞書キーとして使用する必要があります。ここでは、文字列のためにそれを行う方法は次のとおりです。

NSString *key = [NSString stringWithFormat:@"%d", myInteger]; 

@Hughes BRコメントで述べているように、キーオブジェクトのための要件は、それがNSCopyingプロトコルに準拠しなければならないということです。

+0

こんにちは、私は手動で100、101などになるように私のobject.tagを設定します。辞書のキーは@ "101"と書かれています。特に、for-inループを使用したときは、コードの他の部分で辞書に正常にアクセスしていることに注意してください。私の辞書のオブジェクトとキーはすべてそこにあります。 – user339946

+15

文字列を使用する必要はありません。 「NSNumber」で十分であり、潜在的にはより自然に適合する。 '[NSNumber numberWithInteger:[object tag]]'はそのトリックを行います。 –

+0

@SedateAlienそうです。すべてのキーがintの場合、より具体的なデータ型であるためNSNumberがより優れています。次に、間違ったタイプのデータからNSNumberを作成しようとすると、問題の特定が容易になります。 – bneely

5

私は問題なくNSNumbersを使用しますが、通常のsetObject: forKey:またはsetValue: forKey:メソッドを使用しないでください。それは警告を生成するでしょう。

myObject = myDict[key]; 
関連する問題