ios - 从另一个类重新加载核心数据 TableView

标签 ios objective-c xcode uitableview core-data

我正在尝试刷新在 View Controller ( View Controller 1)上使用核心数据的 TableView 上的数据。用于将值保存到核心数据中的保存按钮 (UIButton) 位于不同的 View Controller (View Controller 2) 上。

它们同时位于 iPad 上的同一屏幕上,但通过使用容器 View 具有单独的类(头文件和主文件)。当我单击 View Controller 1 上的保存按钮时,它不会刷新 View Controller 2 上的 TableView 。

但是,我知道这不是将数据保存到 Core Data 中的方式,因为当我刷新应用程序时,新单元格会像预期的那样在 TableView 上弹出。我尝试了以下方法来尝试刷新 TableView ,但没有成功:

// ViewController1.m (Save Button)

- (IBAction)saveMethod {

    //Core Data Save Method Goes Here (Irrelevant)

    [self.managedObjectContext save:nil];

    //ViewController2 has the table view
    ViewController2 *trackingView = [[ViewController2 alloc] init];

    trackingView.managedObjectContext = self.managedObjectContext;
    [trackingView setupFetchedResultsController];
    [trackingView.view setNeedsDisplay];
    [trackingView.table reloadData];
} 

我似乎无法弄清楚如何告诉这个 TableView 从不同的 View Controller 刷新自身。

最佳答案

您不需要像现在一样重新创建 View Controller 。

NSManagedObjectContext完成保存操作后,它会发布一条通知。您可以让任何对象注册来接收这些通知。如果重新设置 fetchedResultsController 的委托(delegate),请考虑这一点不会是一个选项(即 ViewController1 已设置为委托(delegate),并且 ViewController1 继续充当委托(delegate)是有意义的)。

ViewController2将需要对正在处理您的数据的托管对象上下文的引用,因此您需要创建一个属性并对其进行适当的设置( @property NSManagedObjectContext *moc )。

然后,在 viewDidLoad它可以register for notifications :

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(handleNotification:)
                                             name:NSManagedObjectContextDidSaveNotification
                                           object:self.moc];

ViewController2必须定义一个方法 handleNotification: :

-(void)handleNotification:(NSNotification*)notification {
    if ( [notification.name isEqual:NSManagedObjectContextDidSaveNotification] && [notification.object isEqual:self.moc] ) {
        [self.tableView reloadData];
    }
}

关于此方法的一些注意事项:

  1. 当您查看 Controller 已被解除时,请务必调用 [[NSNotificationCenter defaultCenter] removeObserver:self] 。通知中心保留观察者(我曾经很难发现)。
  2. 注册通知时始终包含托管对象上下文,您不希望响应每个保存通知。

关于ios - 从另一个类重新加载核心数据 TableView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15456717/

相关文章:

iphone - 根据碰撞影响移动图像

iphone - 在 Objective C++ 中管理内存我需要知道什么?

ios - 如何使用uiviewcontroller实现滑出式菜单?

objective-c - 随机生成器从不显示的数组中获取数据

ios - 在 MapKit 中的多边形中心添加标签

objective-c - 如何列出指定字体的字体样式

ios - 使用一年中的一周检查 NSDate 是否在当前周

objective-c - CALayer 未显示正确的颜色

xcode - 如何停止对 SKSpriteNode 施加力?

iphone - 如何获取目标名称?