Кто-нибудь сталкивался с этим раньше?
Когда я выбираю удаление строки из моего tableView (заполненного FRC), приложение не падает или не зависает.Это ничего не делает.Кнопка удаления остается выбранной, и если я нажимаю в другом месте на симуляторе, кнопка удаления отменяется и исчезает, но ячейка никогда не удаляется из пользовательского интерфейса.Я уверен, что я делаю глупый надзор, но не могу его заметить.Ниже приведены соответствующие части моего кода.
У меня есть интерфейс UITableViewController, объявленный так:
#import <UIKit/UIKit.h>
#import "RubricAppDelegate.h"
@interface ClassList : UITableViewController <NSFetchedResultsControllerDelegate> {
NSMutableArray *classList;
NSFetchedResultsController *fetchedResultsController;
NSManagedObjectContext *managedObjectContext;
}
@property(nonatomic,retain) NSMutableArray *classList;
@property(nonatomic, retain) NSFetchedResultsController *fetchedResultsController;
@property(nonatomic, retain) NSManagedObjectContext *managedObjectContext;
- (IBAction) grade:(id)sender;
@end
В файле его реализации у меня есть:
- (void)viewDidLoad {
[super viewDidLoad];
RubricAppDelegate *appDelegate = (RubricAppDelegate *)[[UIApplication sharedApplication] delegate];
managedObjectContext = [appDelegate managedObjectContext];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"myClass" inManagedObjectContext:managedObjectContext];
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"classID" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
[request setSortDescriptors:sortDescriptors];
[sortDescriptor release];
fetchedResultsController = [[NSFetchedResultsController alloc]
initWithFetchRequest:request
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:nil cacheName:nil];
NSError *error;
[fetchedResultsController performFetch:&error];
}
И
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
myClass *result = (myClass *)[fetchedResultsController objectAtIndexPath:indexPath];
[managedObjectContext deleteObject:result];
NSError *error;
[managedObjectContext save:&error];
}
else if (editingStyle == UITableViewCellEditingStyleInsert) {
//Not yet implemented
}
}
И
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
UITableView *tableView = self.tableView;
switch(type) {
case NSFetchedResultsChangeInsert:
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]
withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeDelete:
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeUpdate:
[self configureCell:[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
break;
case NSFetchedResultsChangeMove:
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]
withRowAnimation:UITableViewRowAnimationFade];
break;
}
}
Кроме того
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row == [[fetchedResultsController fetchedObjects] count]) {
return UITableViewCellEditingStyleInsert;
}
return UITableViewCellEditingStyleDelete;
}
Этот код выше делает ячейку, расположенную сразу после моих заполненных выборкой ячеек, вставной ячейкой, но остальныеудалить ячейки.
Мой UITableView подключен к владельцу моего файла для его делегата и источника данных в IB.Что мне нужно изменить, чтобы заставить NSFetchedResultsChangeDelete:
срабатывать?
ОБНОВЛЕНИЕ:
Я добавил [managedObjectContext save:&error];
к commitEditingStyle
и подтвердил через точку останова, что это происходит, когда я выбираюудалить ячейку.Я знаю, что сохранение обрабатывается правильно, потому что, если я закрою и перезапущу приложение, ячейки, которые я выбрал для удаления, на самом деле будут удалены.
Однако, когда я нажимаю кнопку удаления, все равно ничего не появляетсяпроисходит.Кнопка остается выделенной до тех пор, пока я не нажму на что-либо еще, отменив выбор.