1

就像在使用 NSDictionary 上的 valueForKeyPath 之前问过的那样,如果键启动 @ 符号?

如果我必须将 NSDictionary 与“@ID”和“@Name”等键一起使用(服务器端限制,我无法控制命名)我该如何解决这个问题?现在,每当我尝试访问这种密钥时,该应用程序就会崩溃。

4

2 回答 2

0

如前所述,您不能这样做。解释Apple Docs reg。密钥格式 -

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

因此,尝试使用@..as start 的密钥不会削减它。我建议您这样做 - 因为您无法更改后端发送密钥的方式,您可以控制这些密钥在 iOS 中的表示方式。因此,一旦您获得密钥,请删除起始@符号并将字符串的其余部分作为密钥插入。由于@在所有键中都是恒定的,因此从所有键中删除它们不应影响您的 dict 的基数。

于 2013-07-16T07:21:07.890 回答
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"]);
于 2013-07-16T07:42:12.850 回答