@ char作为NSDictionary的一个关键

时间:2012-04-23 13:03:01

标签: objective-c ios

我尝试使用@ 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不太熟悉所以请保持温和。

3 个答案:

答案 0 :(得分:4)

Read the documentation:)

具体来说,这一点:

  

如果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”