2011-06-30 72 views
0

編輯:更新的代碼的NSDictionary

我試圖創建表部分,每部分內的字典,然後索引列表,使部分字母將是關鍵...對於部分我:

self.collation = [UILocalizedIndexedCollation currentCollation]; 

NSInteger index, sectionTitlesCount = [[collation sectionTitles] count]; 

NSMutableArray *newSectionsArray = [[NSMutableArray alloc] initWithCapacity:sectionTitlesCount]; 

NSString *alphabet = [[NSString alloc] initWithString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZ"]; 

for (index = 0; index < sectionTitlesCount; index++) { 
    NSMutableArray *array = [[NSMutableArray alloc] init]; 
    [newSectionsArray addObject:array]; 

    NSString *letter = [alphabet substringWithRange:NSMakeRange(index, 1)]; 
    [myDict setObject:newSectionsArray forKey:letter]; 

    [array release]; 
} 

這與崩潰:

'*** -[NSCFString substringWithRange:]: Range or index out of bounds' 

然後對每個字母我需要添加數據爲SE ction,我認爲這個數組可能是段/字母鍵的對象:

for (Data *myData in self.dataModel.datalist) { 

    NSInteger sectionNumber = [collation sectionForObject:myData collationStringSelector:@selector(myName)]; 

    NSMutableArray *sectionData = [newSectionsArray objectAtIndex:sectionNumber]; 

    [sectionData addObject:myData]; 

} 

希望這是有道理的!謝謝!!!

回答

0

定義你的部分陣列中的

 sections = [NSArray arrayWithObjects:@"#", @"a", @"b", @"c", @"d", @"e", @"f", @"g", @"h", @"i", @"j", @"k", @"l", @"m", @"n", @"o", @"p", @"q", @"r", @"s", @"t", @"u", @"v", @"w", @"x", @"y", @"z", nil]; 

實現委託方法

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tView { 
    return [sections count]; 
} 


- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { 
    return sections; 
} 

然後在- (UITableViewCell *)tableView:(UITableView *)tView cellForRowAtIndexPath:(NSIndexPath *)indexPath {你可以得到你的數據的第

NSArray *sectionArray = [myData filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", [sections objectAtIndex:[indexPath section]]]]; 
+0

說實話,這似乎簡單得多,該死的蘋果例子把我送上了晦澀的整理路線!該過濾的數組可用於篩選的搜索結果?非常感謝!!! – medley

+0

Apple使用'UILocalizedIndexedCollat​​ion'演示的原因是因爲它有助於本地化。無論設備的當前語言如何,使用上述技術將始終提供英文字母。 –

+0

好的,謝謝你的信息。這是Apple可以找到的索引桌面視圖的唯一演示。 – medley

0

至於崩潰,它表明sectionTitlesCount的值比字符的字符串字母數量。

我不知道還有什麼價值sectionTitlesCount代表或來自何方(,因爲這是你的代碼不存在),但它會更好,以取代的第一線環

for (index = 0; index < alphabet.length; index++) { 
+0

你仍然沒有顯示什麼sectionTitlesCount的**物理**值是?如果您將NSLog(@「%i」,sectionTitleCount);'放置在您設置的位置的下方,那麼會在日誌中打印什麼值? –

+0

啊,對不起...它返回「sectionTitlesCount 27」(27次) – medley

+0

正確,這就是爲什麼它會崩潰,因爲英文字母只有26個字符。你有沒有看到這樣的示例[這裏](http://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Reference/UILocalizedIndexedCollat​​ion_Class/UILocalizedIndexedCollat​​ion.html),它演示瞭如何在不對硬編碼索引數組進行編碼的情況下執行此操作? –

0

將您的sectionTitlesCount值發送給我們。它可能比絃樂的長度更偉大。