【发布时间】:2013-02-21 18:32:01
【问题描述】:
我想使用NSMutableDictionary 实例作为另一个NSMutableDictionary 的键。
NSMutableDictionary *stuff = [NSMutableDictionary dictionary];
NSMutableDictionary *first = [NSMutableDictionary dictionary];
[stuff setObject:@"A" forKey:first];
NSLog(@"I GOT %@",[stuff objectForKey:first]);
这会按预期输出@"A",这很好。
但是,如果之后我像这样修改first 对象中的值:
[first setObject:@"C" forKey:@"Something"];
我现在无法获取@"A":
NSLog(@"I GOT %@",[stuff objectForKey:first]);
哪个输出nil。
我假设objectForKey 会将键的内存地址与字典中的现有键进行比较 - 因为尽管更改了字典的内部值(我认为),但这样的内存地址不会改变,我预计它会起作用。
我设法让它使用不同的方法 - 改为使用 NSStrings 作为键 - 字符串的值将是内存地址本身,如下所示:
NSMutableDictionary *stuff = [NSMutableDictionary dictionary];
NSMutableDictionary *first = [NSMutableDictionary dictionary];
[stuff setObject:@"A" forKey:[NSString stringWithFormat:@"%p",first]];
[first setObject:@"C" forKey:@"Something"];
NSLog(@"I GOT %@",[NSString stringWithFormat:@"%p",first]);
哪个有效,打印@"A"。
我的问题:
- 为什么我原来的方法不起作用?
【问题讨论】:
标签: ios objective-c nsdictionary nsmutabledictionary