Сортировать элементы в UITableView по дате - PullRequest
0 голосов
/ 28 июня 2011

Так что в моем приложении у меня есть UITableView, а в контроллере навигации есть кнопка для добавления нового элемента.Это приводит вас к экрану добавления элемента, и когда вы закончите, я использую пользовательский делегат для передачи информации из подробного viewController в основной tableViewController.Теперь, когда у меня есть информация от делегата, я беру 3 части информации и помещаю их в NSArray в свой основной массив.Теперь мой вопрос, как я могу отсортировать детали по дате.Я пытался (безуспешно) 3 раза сейчас, и я не могу понять это.Массивы и словари путают, потому что они вложенные.Любая помощь очень ценится.

Метод делегата в классе tableViewController:

-(void)finishedAddingFoodItemFromDetail:(NSDate *)date whatWasEaten:(NSString *)whatFood whichMeal:(NSString *)meal{

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMMM d, yyyy"];
NSString *dateString = [[NSMutableString alloc] init];
dateString = [dateFormatter stringFromDate:date];

if (!self.theArray) {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if ([defaults objectForKey:@"theArray"]) {
        self.theArray = [defaults objectForKey:@"theArray"];
    }
    else{
        self.theArray = [[NSMutableArray alloc] init];
    }
}
[self.theArray addObject:[NSArray arrayWithObjects:dateString, meal, whatFood, nil]];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:self.theArray forKey:@"theArray"];

[self.tableView reloadData];
[self dismissModalViewControllerAnimated:YES];
}

Это высокоуровневый файл, о котором я думал, но я не могу его реализовать.1008 *

/*  file higharchy
 *   - theBigDict     //large dictionary holding everything
 *       - MutableArray by day stored as objects of theBigDict
 *       - Array of the meals info:
 *           - Meal type
 *           - Food
 */

1 Ответ

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

Существует несколько методов для NSMutableArray, которые вы можете вызвать для сортировки его содержимого:

– sortUsingDescriptors:
– sortUsingComparator:
– sortWithOptions:usingComparator:
– sortUsingFunction:context:
– sortUsingSelector:

Поскольку у вас есть массив сложных объектов, вам нужно написать собственную функцию или компаратор и вызватьсоответствующий sortUsingXxx: метод.Сделайте это перед тем, как сохранить массив обратно в NSUserDefaults и перед вызовом reloadData: в вашей таблице.

Помогает ли это?

РЕДАКТИРОВАТЬ: вашей пользовательской функции или компаратору придется вытащить датуиз двух сравниваемых элементов массива (переданных в вашу функцию) и возвращающих соответствующие результаты сравнения, например, NSOrderedAscending и т. д.

...