带@符号的NSDictionary键

像这样在这里问如果一个键启动@符号使用valueForKeyPath on NSDictionary?

如果我必须使用像“@ID”和“@Name”(服务器端的限制,我没有控制命名)键的NSDictionary我怎么能解决这个问题? 现在,每当我尝试访问这种密钥的应用程序只是崩溃。

如前所述,你不能这样做。 解释Apple Docs注册 密钥格式 –

密钥必须使用ASCII编码,以小写字母开头,可能不包含空格。

所以试图用@..作为开始键不会削减它。 我build议你这样做 – 因为你不能改变你的后端发送密钥的方式,你可以控制如何在iOS中表示这些密钥。 所以一旦你得到钥匙删除开始@符号,并插入其余的string作为关键。 由于@在所有键上都是恒定的,所以从所有键中移除它们都不会影响字典的基数。

如果在用不规则键获取字典之后尝试转换字典呢?

这个想法是这样的, 是的,它是线程安全的

 NSDictionary *_dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"value", @"@ID", @"value2", @"@Name", nil]; NSMutableDictionary *_mutableDictionary = [NSMutableDictionary dictionary]; NSLock *_lock = [[NSLock alloc] init]; [_dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { if ([_lock tryLock]) { NSString *_newKey = [key stringByReplacingOccurrencesOfString:@"@" withString:@""]; [_mutableDictionary setValue:obj forKey:_newKey]; [_lock unlock]; } }]; NSLog(@"ID : %@", [_mutableDictionary valueForKey:@"ID"]); NSLog(@"Name : %@", [_mutableDictionary valueForKey:@"Name"]);