2012-04-23 64 views
0

我試圖使用@字符作爲NSDictionary中的鍵,我的應用程序只是崩潰。我搜索了「無效」鍵名,無法在任何地方找到@「@」。如果我使用@「@」以外的東西,它一切正常。@字符作爲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"; 
} 

並能正常工作,它正確地放置@首發公司的A部分。如果我讓第一個信件保持不變(將其保留爲@「@」),則應用程序將崩潰。

此外,這不是我的代碼,我只是想解決它,我不是很熟悉ObjC和Foundation,所以請溫和。

+0

有什麼問題嗎? – Jasper 2012-04-23 13:04:18

+0

我試圖找出是否有其他人有同樣的問題,有沒有辦法逃避/解決這個問題,並使用@作爲關鍵? – andrei 2012-04-23 13:08:03

+0

然後把這個問題。 (雖然跳過「其他人經歷過這個」部分,因爲這裏不是真正的問題)另外,你爲什麼想要? – Jasper 2012-04-23 13:10:08

回答

4

Read the documentation :)

具體來說,該位:

如果鍵不以「@」開頭,則調用objectForKey :.如果鍵確實以「@」開頭,則刪除「@」並用其餘鍵調用[super valueForKey:]。

我想這super valueForKey:不樂意被稱爲:)

爲了解決這個問題,只需撥打objectForKey:代替valueForKey:

+0

這就是它!非常感謝你 ! – andrei 2012-04-23 14:06:51

1

使用字符串@"@"的字典重點工作就好了:

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"Test 1", @"@", @"Test 2", @"Another @", nil]; 
NSString *result = [dict objectForKey:@"@"]; 
NSLog(@"%@", result); 
// --> Test 1 
0

你可以給一個嘗試@ 「\ u0040」

+0

嘗試用@「\ u0040」替換@「@」,它仍然失敗。它應該是相同的字符:) – andrei 2012-04-23 13:46:54