1

我尝试使用 @ char 作为 NSDictionary 中的键,但我的应用程序只是崩溃了。我搜索了“无效”键名,在任何地方都找不到@“@”。如果我使用 @"@" 以外的其他东西,一切正常。

我有一个公司列表,我得到每个公司的第一个字母,然后我创建一个 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];
    }
}

我在抛出时启用了断点中断,它在 [indexDictionary valueForKey:firstLetter] 处停止...仅当 firstLetter 是 @"@" 时。我有一个如果说:

if ([firstLetter isEqualToString:@"@"]) {
    firstLetter = @"A";
}

这很好用,它将@starting 公司正确地放置在A 部分。如果我让 firstLetter 保持不变(将其保留为 @"@"),应用程序将崩溃。

另外,这不是我的代码,我只是想修复它,我对 ObjC 和 Foundation 不太熟悉,所以请温柔一点。

4

3 回答 3

4

阅读文档:)

具体来说,这一点:

如果 key 不以“@”开头,则调用 objectForKey:。如果键确实以“@”开头,则去掉“@”并使用键的其余部分调用 [super valueForKey:]。

我想这super valueForKey:不高兴被称为:)

要修复它,只需调用objectForKey:而不是valueForKey:

于 2012-04-23T13:47:27.650 回答
1

使用字符串@"@"作为字典键就可以了:

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"Test 1", @"@", @"Test 2", @"Another @", nil];
NSString *result = [dict objectForKey:@"@"];
NSLog(@"%@", result); 
// --> Test 1
于 2012-04-23T13:14:25.927 回答
0

你可以试试@"\u0040"

于 2012-04-23T13:27:04.890 回答