2013-02-06 23 views
11

に送られた、私が定義されている私の辞書に "dateTimeの" を追加しようとしていますが、以下:[__NSDictionaryIのsetObject:forKey:]:認識されていないセレクタがインスタンス

Symptom Ranking: { 
    5111ef19253b4a9150000000 = 1; 
    5111f029253b4add4e000000 = 1; 
    5111f036253b4a123d000001 = 1; 
    5111f045253b4a404f000000 = 1; 
} 

NSLog(@"date selected: %@", [[self.datePicker date] description]) 

[self.results setObject:[[self.datePicker date] description] forKey:@"dateTime"]; 

アプリケーションがクラッシュし、私はこの取得:

Symptom Tracker[43134:c07] -[__NSDictionaryI setObject:forKey:]: unrecognized selector sent to instance 0x7603990 
2013-02-06 08:15:58.741 Symptom Tracker[43134:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSDictionaryI setObject:forKey:]: unrecognized selector sent to instance 0x7603990' 
*** First throw call stack: 
(0x171b012 0x1428e7e 0x17a64bd 0x170abbc 0x170a94e 0x521e 0x143c705 0x373920 0x3738b8 0x434671 0x434bcf 0x433d38 0x3a333f 0x3a3552 0x3813aa 0x372cf8 0x2652df9 0x2652ad0 0x1690bf5 0x1690962 0x16c1bb6 0x16c0f44 0x16c0e1b 0x26517e3 0x2651668 0x37065c 0x25dd 0x2505) 

答えて

31

あなたの辞書は不変です。NSDictionaryであり、NSMutableDictionaryではありません。それを修正すれば、うまくいくでしょう。

7

あなたがNSMutableDictionaryを使用する必要があります - スタックトレースは、あなたが__NSDictionaryIを使用している示した(NSDictionary)私は偶然copy財産そうのように宣言するとき、私は一度、このエラーに遭遇した

22

不変である:

@property (nonatomic,copy) NSMutableDictionary* downloadHandlers; 

私はinitでこれをやった:

self.downloadHandlers = [[NSMutableDictionary alloc] init]; 

私はACTU同盟者は不変の辞書を手に入れました。私は、可変オブジェクト上にcopyを呼び出すと、私に可変オブジェクトを与えることになると思うでしょうが、明らかにそうではありません。とにかく、copyというキーワード(最初にそこにいることは決してありませんでした)に移動して問題を解決しました。

+0

これはまさに私の問題でした。ありがとう! –

+0

この全く同じ問題が発生しました。ありがとう!! – coolcool1994

2

NSDictionaryの代わりにNSMutableDictionaryを使用する必要があるとの回答が最上位にあります。そして、ケースには、あなたがリテラルを使用したい、のようなmutableCopyを使用します。この問題は、我々はウェブを扱っているほとんどの時間を発生

dict[@"key"] = @"new-value"; 
+0

注意深いリテラルは、[NSDictionary alloc] initWithObjectsAndKeysを使用して終了しますが、これは終了しません... –

3

を使用して、あなたがすることができ、再アサインキーようにするため

NSMutableDictionary* dict = [@{@"key": @"value"} mutableCopy]; 

受信したデータが不変であるため、サービス応答。不変のデータを変更しようとすると、アプリケーションが確実にクラッシュします。 次のコードスニペットが役立つことを願っています。私の場合

NSMutableDictionary *headerData; 

/*Every time you need to allocate memory to the corresponding MutableDictionary variable*/ 

headerData =[[NSMutableDictionary alloc ]initWithDictionary:response[@"Header"]]; 
3

Iは[AnyHashable:ANYOBJECT]の値を返し、SWIFTコードあったフォーマットを、I]は[[AnalyticsManager共有よう

NSMutableDictionary *logDict = [[NSMutableDictionary alloc]initWithDictionary:[[AnalyticsManager shared]addCommonPropertiesWithProperties:logDict]];

場合、NSMutableDictionaryに変換しなければなりませんでしたaddCommonPropertiesWithProperties:logDict]この部分は[AnyHashable:AnyObject]形式で返されます。それが私の問題を解決しました。

関連する問題