2012-04-23 17 views
0

NSDictionaryで@ charをキーとして使用しようとしましたが、アプリケーションがクラッシュしました。 「無効な」キー名を検索したところ、@ "@"はどこにも見つかりませんでした。 @ "@"以外のものを使用すると、すべて正常に動作します。NSDictionaryのキーとして@charを使用

私は会社のリストを持っていますが、私は各社の最初の手紙を得て、最初の文字をキーにNSMutableArrayを値としてNSMutableDictionaryエントリを作成しています。

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セクションに@開始企業を配置します。 firstLetterを変更しないで@ @ "@"のままにしておくと)、アプリケーションがクラッシュします。

また、これは実際に私のコードではありません。私はそれを修正しようとしています。私はObjCとFoundationにはあまり慣れていません。あなたが@は "\ u0040" 具体的

+0

の質問は何ですかvalueForKey:objectForKey:を呼ぶ幸せではないことを推測しますか? – Jasper

+0

他の誰かが同じ問題を抱えているかどうかを調べようとしていましたが、これを逃れる/修正してキーとして@を使用する方法がありますか? – andrei

+0

これを質問に入れてください。 (実際にここで尋ねるものではないので、「他の誰かがこのことを体験しているのですか?」とスキップします)また、なぜあなたはしたいですか? – Jasper

答えて

4

Read the documentation :)

、このビットを試してみることができ

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

これはそれです!どうもありがとうございました ! – andrei

1

キーが「@」で始まらない場合は、objectForKey:を呼び出します。キーの先頭が「@」の場合、「@」を取り除き、残りのキーで[super valueForKey:]を呼び出します。

私は super valueForKey:が呼び出されている:)

はそれを修正するには、だけではなく、

0

:ちょうど罰金辞書のキー作品として文字列@"@"を使用して

+0

@ "@"を@ "\ u0040"に置き換えようとしましたが、それでも失敗します。とにかく同じ文字にする必要があります:) – andrei

関連する問題