Как отобразить данные XML, которые хранятся в виде глобальных данных в сгруппированном табличном представлении - PullRequest
1 голос
/ 01 ноября 2010

Я использую XML Parser для синтаксического анализа XML-файла и сохранения в качестве глобальных данных. Я получаю эти данные и отображаю их в виде таблицы. Я использую этот образец для включения функции поиска.

Я хотел отобразить данные в виде сгруппированного табличного представления с алфавитами и заголовками ...

Как --- >> | A |

        Adam

        Apple...

Вот как я раньше отображал таблицу без групп:

-(UITableViewCell *) tableView : (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath 
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"acell"]; 

    if(cell == nil) 
    { 
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"acell"] autorelease]; 
    }

    if(searching)
    {
        Boat *copyboat = [copyListOfItems objectAtIndex:[indexPath row]];

        cell.textLabel.text = [copyboat boatName];
        NSLog(@"%@", [copyboat boatName]);
    }
    else {
        NSSortDescriptor *alphaDesc = [[NSSortDescriptor alloc] initWithKey:@"boatName" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
        [[data boats] sortUsingDescriptors:[NSMutableArray arrayWithObjects:alphaDesc, nil]];   
        Boat *fullboat =[data.boats objectAtIndex:[indexPath row]];
        cell.textLabel.text =[fullboat boatName];
        [alphaDesc release];
    }

    return cell; 
}

Как отобразить данные в табличном представлении в виде разделов?

1 Ответ

0 голосов
/ 01 ноября 2010

Вы не упоминаете, как выглядят ваши данные, к каким данным вы их анализируете. Я предполагаю, что «Глобальные данные» означают некоторый NSArray, который доступен для всего приложения.
Вы действительно должны подумать об использовании CoreData, если вы этого не делаете.

Я адаптировал пример кода Apple CoreDataBooks , чтобы он использовал не имя автора для создания разделов, а его первую букву.

добавить эту категорию в книгу до реализации RootViewController:

@interface Book (FirstLetter)
- (NSString *)uppercaseFirstLetterOfName;
@end

@implementation Book (FirstLetter)
- (NSString *)uppercaseFirstLetterOfName {
    [self willAccessValueForKey:@"uppercaseFirstLetterOfName"];

    NSString *aString = [[self valueForKey:@"author"] uppercaseString];     
    NSString *stringToReturn = [aString substringToIndex:1];

    [self didAccessValueForKey:@"uppercaseFirstLetterOfName"];
    if ([stringToReturn integerValue] || [stringToReturn isEqualToString:@"0"] ) {
        return @"#";
    }
    return stringToReturn ;
}
@end

в RootViewController - (NSFetchedResultsController *)fetchedResultsController getter

изменить

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"author" cacheName:@"Root"];

до

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"uppercaseFirstLetterOfName" cacheName:@"Root"];

изменить в ответ на комментарий

Вы можете использовать NSDirectory, который содержит первую букву в качестве ключа и NSArray со всеми связанными объектами данных в качестве объекта.

  • numberOfSectionsInTableView: вернется [[theDirectory allKeys] count]
  • tableView:titleForHeaderInSection: возвращает [[theDirectory allKeys] objectAtIndex:section]. Сортировка здесь не показана.
  • tableView:numberOfRowsInSection: возвращает [theDirectory objectForKey:[[theDirectory allKeys] objectAtIndex:section]]
  • , а в tableView:cellForRowAtIndexPath: вы используете indexPath.section и indexPath.row для адресации нужных данных.

Я не проверял это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...