Сортировка UITableView (Core Data) через NSDate - PullRequest
4 голосов
/ 10 августа 2011

Для примера, скажем, у меня есть кнопка, которая при каждом нажатии добавляет NSDate в сущность Core Data.У меня также есть TableView, который отображает всех членов этого объекта.

Как я могу отсортировать TableView по NSDate?Формат, который выходит в следующем: 2011-08-09 21:52:13 +0000 и я хочу отсортировать по самым последним в верхней части TableView.

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 10 августа 2011

Если вы используете NSFetchedResultsController (как и должно быть, если вы используете Core Data с UITableViewController), то код для этого, по сути, предоставляется для вас.Предполагая, что вы используете шаблон Базовых данных по умолчанию с UITableViewController, вам должен быть предоставлен метод fetchedResultsController.Чтобы изменить метод, в котором таблица сортирует свои элементы, просто используйте это:

- (NSFetchedResultsController *)fetchedResultsController
{
    ...
    // Edit the sort key as appropriate.
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Date" ascending:NO];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    ...
}

Где @"Date" должен быть заменен на то, что вы назвали своей записью Базовых данных с сохранением даты.Это должно сортироваться точно так, как вы хотите, и является «подходящим» способом сделать это, если вы используете NSFetchedResultsController.Если вы этого не сделаете, вам придется использовать timeIntervalSinceReferenceDate для сравнения и сортировки каждой NSDate, как сказал tassinari.Я рекомендую вам использовать NSFetchedResultsController, хотя.

1 голос
/ 10 августа 2011

Вот что я делаю:

Добавить:

static NSDateFormatter *dateFormatter = nil;
    if (dateFormatter == nil) {
        dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
        [dateFormatter setDateStyle:NSDateFormatterMediumStyle];
    }

в ваш метод cellForRowAtIndexPath вне части if (cell == nil). Затем, где вы устанавливаете информацию для своих ячеек (РЕДАКТИРОВАТЬ: это где ваш массив сортируется с самыми новыми вверху):

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"creationDate" ascending:NO];
        [myArray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

Тогда вы можете делать с датой все, что захотите. Пример:

cell.textLabel.text = [dateFormatter stringFromDate:myObject.creationDate];
1 голос
/ 10 августа 2011

Используйте timeIntervalSinceReferenceDate или timeIntervalSince1970 для NSDate, оба возвращают timeIntervals, которые определены как двойные и сортируемые.

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