我尝试使用@ char作为NSDictionary中的键,我的应用程序只是崩溃了。我搜索了“无效”的密钥名称,无法在任何地方找到@“@”。如果我使用的不是@“@”,那么一切正常。
我有一个comanies列表,我得到每个公司的第一个字母,然后我创建一个NSMutableDictionary条目,其中包含第一个字母作为键,NSMutableArray作为值。
NSMutableDictionary indexDictionary = [[NSMutableDictionary alloc] init];
// here we have a loop on companyName
{
NSString *fristLetter = [[companyName substringToIndex:1] uppercaseString];
NSMutableArray *arrayOfIndexedCompanies = [indexDictionary valueForKey:firstLetter];
if (arrayOfIndexedCompanies) {
[arrayOfIndexedCompanies addObject:companyName]
}
else {
NSMutableArray *newArray = [NSMutableArray array];
[indexDictionary setObject:newArray forKey:firstLetter];
[newArray addObject:companyName];
}
}
我在throw上启用了断点中断,它在[indexDictionary valueForKey:firstLetter]中停止...仅当firstLetter是@“@”时才会停止。 我有一句话:
if ([firstLetter isEqualToString:@"@"]) {
firstLetter = @"A";
}
这很好用,它会正确地将@ starting公司放在A部分。如果我让firstLetter保持不变(将其保留为@“@”),应用程序将崩溃。
另外,这不是我的代码,我只是想解决它,我对ObjC和Foundation不太熟悉所以请保持温和。
答案 0 :(得分:4)
具体来说,这一点:
如果key不以“@”开头,则调用objectForKey:。如果key以“@”开头,则删除“@”并使用其余键调用[super valueForKey:]。
我想super valueForKey:
被称为objectForKey:
并不开心:)
要解决此问题,只需拨打valueForKey:
而不是{{1}}
答案 1 :(得分:1)
使用字符串@"@"
作为字典键可以正常工作:
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"Test 1", @"@", @"Test 2", @"Another @", nil];
NSString *result = [dict objectForKey:@"@"];
NSLog(@"%@", result);
// --> Test 1
答案 2 :(得分:0)
您可以试试@“\ u0040”