NSDictionary из разделов таблицы и содержимого - PullRequest
0 голосов
/ 30 июня 2011

Редактировать: Обновленный код

Я пытаюсь создать словарь из разделов таблицы, а затем индексный список в каждом разделе, поэтому ключ раздела будет ключевым ... Для разделов, которые у меня есть:

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'

Затем для каждой буквы мне нужно добавить данные для этого раздела, я думаю, что этот массив будет объектом для ключа раздела / буквы:

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

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

    NSMutableArray *sectionData = [newSectionsArray objectAtIndex:sectionNumber];

    [sectionData addObject:myData];

}

Надеюсь, это имеет смысл! Спасибо !!!

Ответы [ 3 ]

0 голосов
/ 30 июня 2011

Разместите ваше значение sectionTitlesCount. Это может быть больше, чем длина строки.

0 голосов
/ 30 июня 2011

Определите ваши секции в массиве

        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 голосов
/ 30 июня 2011

Что касается сбоя, предполагается, что значение sectionTitlesCount больше, чем количество символов в строке алфавит .

Я не уверен, какое значение sectionTitlesCount представляет или откуда оно взято (, поскольку оно отсутствует в вашем коде ), но было бы лучше заменить первую строку вашего для цикла с

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