テーブルビューに連絡先の配列 ( [[ContactStore sharedStore]allContacts] ) を表示し、リストをアルファベットのセクションに分割しました。次のコードを使用して、連絡先の最初の文字の配列と、文字ごとのエントリ数の辞書を返しました。
//create an array of the first letters of the names in the sharedStore
nameIndex = [[NSMutableArray alloc] init];
//create a dictionary to save the number of names for each first letter
nameIndexCount = [[NSMutableDictionary alloc]init];
for (int i=0; i<[[[ContactStore sharedStore]allContacts]count]; i++){
//Get the first letter and the name of each person
Contact *p = [[[ContactStore sharedStore]allContacts]objectAtIndex:i];
NSString *lastName = [p lastName];
NSString *alphabet = [lastName substringToIndex:1];
//If that letter is absent from the dictionary then add it and set its value as 1
if ([nameIndexCount objectForKey:alphabet] == nil) {
[nameIndex addObject:alphabet];
[nameIndexCount setValue:@"1" forKey:alphabet];
//If its already present add one to its value
} else {
NSString *newValue = [NSString stringWithFormat:@"%d", ([[nameIndexCount valueForKey:alphabet] intValue] + 1)];
[nameIndexCount setValue:newValue forKey:alphabet];
}
}
これは機能しますが、配列が大きい場合は非常に遅くなります。これを行うためのより良い方法があると確信していますが、私はこれに慣れていないため、方法がわかりません。これを行うためのより良い方法についての提案はありますか?