Я пытаюсь отредактировать порядок моего UITableView при использовании Core Data и NSFetchedResultsController. Насколько я понимаю, Core Data не имеет встроенного метода переупорядочения объектов в модели Core Data.Попытка переупорядочения UITableView с использованием NSFetchedResultsController
Идея состояла в том, чтобы создать массив, изменить порядок моих объектов и затем записать эти данные обратно в мою модель.
NSFetchedResultsController
-(NSFetchedResultsController *) fetchedResultsController {
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSManagedObjectContext *context = [self managedObjectContext];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"List" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"listName" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc]initWithObjects:sortDescriptor, nil];
fetchRequest.sortDescriptors = sortDescriptors;
_fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
_fetchedResultsController.delegate = self;
return _fetchedResultsController;
}
moveRowAtIndexPath
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath; {
NSMutableArray *toDoItems = [[self.fetchedResultsController fetchedObjects] mutableCopy];
NSManagedObject *managedObject = [[self fetchedResultsController] objectAtIndexPath:sourceIndexPath];
[toDoItems removeObject:managedObject];
[toDoItems insertObject:managedObject atIndex:[destinationIndexPath row]];
int i = 0;
for (NSManagedObject *moc in toDoItems) {
[moc setValue:[NSNumber numberWithInt:i++] forKey:@"listName"];
}
[self.managedObjectContext save:nil];
}
Когда я ударил Edit
кнопку, я могу изменить строки, но как только я позволяю строки идут, мое приложение аварии. Я не получаю никакой трассировки стека в консоли при ее сбое.
я поставил точку останова на исключение и это, кажется, сбой на этой линии
[moc setValue:[NSNumber numberWithInt:i++] forKey:@"listName"];
Мой ключ имя правильно. Но теперь я понимаю, что это совершенно неправильно в том, что я пытаюсь установить это как число, и это не должно быть так.
Любое предложение или толчок в правильном направлении было бы оценено.
Это была мысль, которую я имел прошлой ночью. Я смотрел на то, как другие люди справлялись с этим, и казалось, что немало людей добавили дополнительный атрибут своей сущности для сортировки. – Martin