2

率直に言って、それはかなり詳細な質問です。NSMutableDictionaryのAppleドキュメントhttps://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableDictionary_Class/Reference/Reference.htmlは次のように述べています。

setObject:forKey:
Adds a given key-value pair to the dictionary.
- (void)setObject:(id)anObject forKey:(id)aKey

それによると、パラメータforKeyは任意のオブジェクトを受け入れます。ただし、NSNumberを渡そうとすると、Incompatible pointer types sending 'NSNumber *' to parameter of type 'NSString *' 明らかに一部のNSStringのみがキーとして受け入れられます。

とりあえず、番号を文字列に変換します。結局、それはただの鍵です。しかし、誰が正しいか知っている人はいますか?ドキュメントまたはコンパイラ?

4

3 に答える 3

11

を使用する場合、その警告は表示されませsetObject:forKey:。ただし、同様の名前の を使用する、その警告が表示されsetValue:forKey:ます。後者は、名前が似ているように見えますが、キー値コーディング システムの一部であるためNSString、キーとして an のみを受け入れます。

違いを示すサンプル プログラムを次に示します。

于 2012-10-18T20:39:47.937 に答える
3

Appleのドキュメントは正しいです.@ mipadiが言っsetObject forKeyたように、メソッドをと混同していたのかもしれません.setValue forKey

于 2012-10-18T20:41:37.787 に答える
0

これはうまくいきます:

 [someMutableDictionary setObject:@"a string" forKey:[NSNumber numberWithInt:1]];

あなたのコードはどのように見えますか?

于 2012-10-18T20:41:15.927 に答える