0

我有一个UITableViewController是CoreDataTableViewController(它是Stanford class)的子类。这实现了fetchedResultsController每当上下文更改时重新加载UITableView数据?

现在,在我的viewWillAppear,我有这样的:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    if(!self.managedObjectContext) { 
     [self useManagedDocument]; 
    } 
} 

它初始化managedObjectContext如果我没有之一,从一个辅助类得到它。在MOC二传手,我初始化fetchedResultsController

- (void)setManagedObjectContext:(NSManagedObjectContext *)managedObjectContext 
{ 
    _managedObjectContext = managedObjectContext; 

    if(self.managedObjectContext) { 
     NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:CD_ITEM_ENTITY_NAME]; 
     request.sortDescriptors = @[[NSSortDescriptor 
            sortDescriptorWithKey:CD_ITEM_NAME_PROPERTY 
            ascending:YES 
            selector:@selector(localizedCaseInsensitiveCompare:)]]; 
     request.predicate = nil; 
     self.fetchedResultsController = [[NSFetchedResultsController alloc] 
             initWithFetchRequest:request 
             managedObjectContext:self.managedObjectContext 
             sectionNameKeyPath:nil 
             cacheName:nil]; 
    } else { 
     self.fetchedResultsController = nil; 
    } 

} 

当我的程序启动时,它正确地加载表数据和我说,调试器有做了一个获取请求。然而,将数据插入我的核心数据曲线图,并保存后,它说,环境的变化和火灾此委托方法:

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller 
{ 
    /*NSError *error; 
    [controller performFetch:&error]; 
    if(error) { 
     NSLog(@"%@", error); 
    } 
    [self.tableView reloadData];*/ 
} 

我评论这个,因为它不工作。基本上,我想要做的是每次上下文更改时重新加载数据。如果我在另一个视图控制器中添加一个项目然后回到这个项目,它也应该重新加载。

我该如何实施?我试着在该代理方法中执行performFetch,并将其输入(我通过在内部设置断点来检查),但performFetch什么也没做,我的表格也没有重新加载。

当我在一个模式VC添加一个项目(另一个我有管理的项目)这是在我的记录情况:

2013-05-10 22:41:38.264 App1[7742:c07] [ItemCDTVC performFetch] fetching all Item (i.e., no predicate) 
2013-05-10 22:41:46.454 App1[7742:c07] NSManagedObjects did change. 
2013-05-10 22:41:46.456 App1[7742:c07] NSManagedContext did save. 

当我关闭应用程序,但没有从多任务戒烟吧酒吧,然后重新打开它,它什么都不做。没有获取。那么,如果上下文没有改变,我不希望它发起请求,但想象一下,如果用户在另一个ViewController中添加一个项目,然后返回到我的ItemCDTVC,它列出所有项目。它是否获取了上下文更改通知,以便它可以调用委托方法来更新表,或者无论我的viewWillAppear中的更改是否总是需要刷新?我目前已将它设置为仅在应用程序加载时执行一次。

回答

0

固定的,所有我必须做的就是把一个垫片,该委托方法:

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller 
{ 
    [self.tableView endUpdates]; 
} 

这结束的更新,插入,删除,并表所做的更改(刷新我的观点,本质上)的与Apple's documentation相同。

它现在更新内容更改。

相关问题