在Using valueForKeyPath on NSDictionary if a key starts the @ symbol?
之前问过这里如果我必须使用带有“@ID”和“@Name”等密钥的NSDictionary(服务器端限制,我无法控制命名)我该如何解决这个问题?现在,只要我试图访问这种密钥,应用程序就会崩溃。
答案 0 :(得分:0)
如前所述,你不能这样做。解释Apple Docs reg。密钥格式 -
密钥必须使用ASCII编码,以小写字母开头,并且可以 不包含空格。
因此尝试使用@..
作为开头的密钥并不会削减它。我建议您这样做 - 因为您无法更改后端发送密钥的方式,您可以控制这些密钥在iOS中的表示方式。因此,一旦获得密钥,删除起始@
符号并将其余字符串作为键插入。由于@
在所有键上都是常量,因此从所有键中删除它们不应影响dict的基数。
答案 1 :(得分:0)
如果您在使用不规则键获取字典后尝试转换字典会怎么样?
这个想法就是这个,而是的,它是线程安全的:
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"]);