0

我有一个 UITableViewController 是CoreDataTableViewController(它是斯坦福类)的子类。这实现了一个fetchedResultsController.

现在,在我的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. 我目前将其设置为仅在应用加载时执行一次。

4

1 回答 1

0

已修复,我所要做的就是在该委托方法中添加一个衬里:

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

这结束了对表所做的更新、插入、删除和更改(基本上刷新了我的视图),与Apple 的文档相同。

它现在更新内容更改。

于 2013-05-10T22:20:53.200 回答