Как изменить список iPhone для добавления другого уровня и доступа к данным в коде - PullRequest
1 голос
/ 22 декабря 2009

У меня есть список с индексированным списком записей в алфавитном порядке. Теперь я хочу добавить дополнительный уровень, чтобы каждая запись имела текст определения (например, небольшой словарь). Мне нужен совет, как изменить мой plist и код, чтобы приспособиться к этому. Существующий код ниже - он из книги Apress, но я не могу изменить его для другого уровня.

NSString *path = [[NSBundle mainBundle] pathForResource:@"sortedglossary" ofType:@"plist"];
NSDictionary *dict = [[NSDictionary alloc]initWithContentsOfFile:path];
self.names = dict;
[dict release];

NSArray *array = [[names allKeys] sortedArrayUsingSelector:@selector(compare:)];
self.keys = array;

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
NSLog(@"numberOfSectionInTable start");
return [keys count];
}


-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSLog(@"numberOfRowsInSection start");
NSString *key = [keys objectAtIndex:section];
NSArray *nameSection = [names objectForKey:key];
return [nameSection count];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSUInteger section = [indexPath section];
NSUInteger row = [indexPath row];
NSString *key = [keys objectAtIndex:section];
NSArray *nameSection = [names objectForKey:key];
static NSString *SectionsTableIdentifier = @"SectionsTableIdentifier";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SectionsTableIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:SectionsTableIdentifier] autorelease];
}

cell.text = [nameSection objectAtIndex:row];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;
}

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
NSLog(@"titleForHeader");
NSString *key = [keys objectAtIndex:section];
return key;
}

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

1 Ответ

0 голосов
/ 23 декабря 2009

Есть несколько способов сделать это.Обычно я просто создаю другого потомка корневого узла в списке для определений.

Таким образом, ваш список будет иметь массив ваших записей и иметь другой словарь.Словарь содержит текст определения, основанный на значениях из первого массива.Таким образом, вы можете просто посмотреть определение, когда вам это нужно.

Таким образом, структура будет выглядеть примерно так:

Root
  Entries(NSArray)
    0 => entryA(NSString)
    1 => entryB(NSString)
    ...
    x => entryX(NSString)
  Definitions(NSDictionary)
    entryA(NSString) => definitionA(NSString)
    entryB(NSString) => definitionB(NSString)
    ...
    entryX(NSString) => definitionX(NSString)
...