я следующий фрагмент кода:iOS - отличить NSDictionary от NSMutableDictionary?
NSString* value = @"value";
NSString* key = @"key";
NSMutableDictionary* foo = [NSMutableDictionary dictionary];
NSDictionary* bar = [NSDictionary dictionary];
NSAssert([bar isKindOfClass: [NSMutableDictionary class]], @""); // passes the assert as both are NSCFDictionary;
NSAssert([bar respondsToSelector: @selector(setValue:forKey:)], @""); // passes the assert because it NSCFDictionary does respond to the selector
[foo setValue:value forKey:key]; // no problem, foo is mutable
[bar setValue:value forKey:key]; // crash
Так что, если у меня есть объект, который является либо NSDictionary
или NSMutableDictionary
, если не считать попытку блока (который я предпочел бы избежать), как я могу рассказать разница?
Возможно, вы захотите использовать -setObject: forKey :, not -setValue: forKey :. –
У вас есть реальный пример того, когда у вас будет словарь, и не быть уверенным, является ли он изменчивым? – bneely
Просто хотел добавить, что [бар отвечаетToSelector: @selector (setValue: forKey :)) НЕ работает. – picciano