带有@符号的NSDictionary键

时间:2013-07-16 07:12:41

标签: ios objective-c nsdictionary

Using valueForKeyPath on NSDictionary if a key starts the @ symbol?

之前问过这里

如果我必须使用带有“@ID”和“@Name”等密钥的NSDictionary(服务器端限制,我无法控制命名)我该如何解决这个问题?现在,只要我试图访问这种密钥,应用程序就会崩溃。

2 个答案:

答案 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"]);