【问题标题】:fetchedResultsController not updating row one properlyfetchedResultsController 没有正确更新第一行
【发布时间】:2012-06-08 18:27:02
【问题描述】:

我正在使用实体“客户”和属性“名称”测试一个简单的核心数据项目。我正在使用主从模板的修改版本; Master包含名称的tableview,detail用于输入名称。

在Master的prepareForSegue中,我设置Details的Customer对象如下:

...
else if ([segue.identifier isEqualToString:@"Add Customer"]) {
    [[segue destinationViewController] setDelegate:self];
    [[segue destinationViewController] setCust:(Customer *) [NSEntityDescription insertNewObjectForEntityForName:@"Customer"inManagedObjectContext:self.managedObjectContext]];
}

Master的insertNewObject添加通用名:

...
[newManagedObject setValue:sender forKey:@"name"];
...

详细来说,名称是通过委托添加的:

- (IBAction)save:(UIBarButtonItem *)sender {
self.cust.name = self.customerName.text;
[self.delegate addNameController:self selectedSave:YES];  

Master的委托方法:

- (void)addNameController:(AddNameController *)controller selectedSave:(BOOL)save {
if (!save) {
    [self.managedObjectContext deleteObject:controller.cust];
}
NSError *error = nil;
if (![self.managedObjectContext save:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}
[self dismissViewControllerAnimated:YES completion:nil];}

这一切都很好,表格视图会为所有新名称条目正确更新除了任何条目,排序明智,成为第一个条目。在这种情况下,虽然名称 添加到 db,但在 tableview 的第一行中放置了一个空白条目。我可以通过点按“编辑”按钮或添加一个排在不可见名称之前的新名称来显示该名称。

为了解决这个问题,我强制在 Master 中重新加载:

- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.tableView reloadData];}

这对我来说似乎有点小题大做。据我了解,Core Data 将负责正确更新显示以响应任何内容更改。

我的实现方式是否存在问题,或者这是 Core Data 的特性?

谢谢。

【问题讨论】:

    标签: objective-c ios uitableview core-data nsfetchedresultscontroller


    【解决方案1】:

    实际上,必须显式更新该表,除非您有一个链接到您执行此操作的 NSFetchedResultsController delegate 的方法。 (委托方法是controllerDidChangeContent:。)

    一个更方便和明显的方法是在关闭详细视图时在您的主代理回调中正确执行此操作。这不是“黑客”。

    【讨论】:

      猜你喜欢
      • 2019-03-03
      • 2022-11-30
      • 2017-07-06
      • 2012-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多