Сортировать UITableview в цель c с датами по убыванию NSDictionary - PullRequest
1 голос
/ 28 июня 2011

Спасибо, что заглянули в мой вопрос здесь. Я пытаюсь получить uitableview с разбивкой по датам в порядке убывания. Я получаю данные из заказа sqllite по дате поля desc. Но что бы я ни делал, даты отображаются в порядке возрастания. У меня есть следующий набор данных, который выходит из БД и в следующем порядке:

ID BookName DateRead
1  ABC      19-10-2011
2  ABZ      27-06-2011
3  ABD      28-05-2011  

Я бы хотел, чтобы данные отображались следующим образом

19-10-2011  
ABC 
27-06-2011  
ABZ
28-05-2011  
ABD  

но независимо от того, что я пытаюсь, я получаю возвращенные данные, как показано ниже:
19.10.2011
ABC
28.05.2011
ABZ
27.06.2011
ABD

Вот полный список кода, который я использую: .h файл

    #import <UIKit/UIKit.h>
    @interface BookHistoryViewController : UITableViewController {
        NSArray *books;
        NSMutableDictionary *sections; 
    }
    @property (nonatomic,retain) NSArray *books;
    @property (nonatomic,retain) NSMutableDictionary *sections;

@end

Вот мой .m файл

- (void)viewDidLoad {

    TestAppDelegate *appDelegate = (TestAppDelegate *)[[UIApplication sharedApplication] delegate];


   [Book getInitialDataToDisplay:[appDelegate getDBPath]];



    self.books = [NSMutableArray arrayWithArray:appDelegate.bookArray];


    self.sections = [[NSMutableDictionary alloc] init];



    BOOL found;

    // Loop through the books and create our keys

    for (NSDictionary *book in books)
    {    


        NSString *c = [book valueForKey:@"DateRead"];

        found = NO;

        for (NSString *str in [self.sections allKeys])
        {
            if ([str isEqualToString:c])
            {
                found = YES;
            }
        }

        if (!found)
        {     
            [self.sections setValue:[[NSMutableArray alloc] init] forKey:c];
        }
    }

    // Loop again and sort the books into their respective keys
    for (NSDictionary *book in self.books)
    {
        [[self.sections valueForKey:[book valueForKey:@"DateRead"]] addObject:book];
    }    

    // Sort each section array
    for (NSString *key in [self.sections allKeys])
    {
        [[self.sections objectForKey:key] sortUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"DateRead" ascending:NO]]];
    }    

    [super viewDidLoad];

}


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{
    return [[self.sections allKeys] count];
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{    
    return [[[self.sections allKeys] sortedArrayUsingSelector:@selector(compare:)] objectAtIndex:section];


}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{
    return [[self.sections valueForKey:[[[self.sections allKeys] sortedArrayUsingSelector:@selector(compare:)] objectAtIndex:section]] count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    }

    NSDictionary *book = [[self.sections valueForKey:[[[self.sections allKeys] sortedArrayUsingSelector:@selector(compare:)] objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row];

    cell.textLabel.text = [book valueForKey:@"title"];    


    return cell;


}

1 Ответ

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

Когда вы получаете книгу в tableView:cellForRowAtIndexPath:, вы сначала сортируете по ключу раздела, который является dateRead в виде строки, но вы сортируете в порядке возрастания. Вы, вероятно, хотите отсортировать, используя дескриптор, как вы делаете в viewDidLoad. На самом деле, почему бы просто не сохранить его в правильно отсортированном порядке, чтобы вам не приходилось сортировать каждый раз, когда вам нужна ячейка? То, как вы это сделаете, заставит интерфейс довольно быстро остановиться.

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