У меня есть UISegmentControl с моим UITableView, который сортирует данные. Я хотел бы иметь возможность делать вещи:
(1) сортировка по умолчанию (поэтому, когда пользователь впервые включает приложение, он выбирает первый сегмент и сортирует по этому действию)
(2) помните, где пользователь находился между загрузками таблицы. Под этим я подразумеваю, что, подобно обложке Apple, когда я перехожу к другой обложке, UITableView заполняется заново. Так что, если в последний раз пользователь был там, сортировка была в 3-м сегменте, он запомнил бы это.
Я немного новичок в объектно-ориентированном дизайне, и я догадывался, что не везде должен быть один и тот же избыточный код: (MarkersList является NSMutableArray)
- (NSArray *)sortByName:(NSArray *)sortDescriptors {
return [self.MarkersList sortedArrayUsingDescriptors:sortDescriptors];
}
- (NSArray *)sortByRSID:(NSArray *)sortDescriptors {
return [self.MarkersList sortedArrayUsingDescriptors:sortDescriptors];
}
- (void)setSortedMarkersList:(NSArray *)sortedArray {
if (self.MarkersList != nil) {
[self.MarkersList removeAllObjects];
}
[self.MarkersList addObjectsFromArray:sortedArray];
}
- (IBAction)sortButtonPressed:(UISegmentedControl *)segmentControl {
// Create sort descriptors
NSSortDescriptor *nameDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"Name" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)] autorelease];
NSSortDescriptor *rsID = [[NSSortDescriptor alloc] initWithKey:@"ID" ascending:YES];
if ([segmentControl selectedSegmentIndex] == NAME) { // this is #define 0
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:nameDescriptor, rsIDDescriptor, nil];
NSArray *sortedArray = [self sortByGene:sortDescriptors];
[self setSortedMarkersList:sortedArray];
[sortDescriptors release];
}
else if ([segmentControl selectedSegmentIndex] == RS_ID) {
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:rsIDDescriptor, resultDescriptor, nameDescriptor, nil];
NSArray *sortedArray = [self sortByRSID:sortDescriptors];
[sortDescriptors release];
[self setSortedMarkersList:sortedArray];
}
[self.MarkersTableView reloadData];
}
Третий вид еще не реализован, так как это не просто NSString или NSNumber, как два других. Пока, я думаю, что это работает правильно. Тем не менее, проблема у меня заключается в реализации (1), мне нужно будет вызвать sortByName, когда моя таблица загружена. Я мог бы просто создать NSSortDescriptors снова, но это кажется излишним. Есть ли более OOD способ достичь этого?
Для (2), я полагаю, я мог бы сохранить этот индекс для таблицы в словаре и извлечь его при загрузке этой таблицы. Или что-то в этом роде, не совсем уверен.
Любая помощь очень ценится. Спасибо!