1

我有一个由 NSFetchedResultsController 支持的表格视图。

每当底层上下文中的对象发生变化时,NSFetchedResultsController 都会自动在 table-view 上反映新的属性值。耶。

我注意到的一个例外是对用于 sectionNameKeyPath 的属性值的更新不会自动反映。

我猜想用于 sectionNameKeyPath 的属性值对于 NSFetchedResultsController 来说是如此重要,以至于我需要再次执行获取并重新加载表格视图?

更新:这里是用于配置获取请求的代码

- (void)configureFetch {

CoreDataHelper *cdh = [(AppDelegate *)[[UIApplication sharedApplication] delegate] cdh];

NSFetchRequest *request =
[NSFetchRequest fetchRequestWithEntityName:@"Item"];

request.sortDescriptors =
[NSArray arrayWithObjects:
 [NSSortDescriptor sortDescriptorWithKey:@"locationAtHome.storedIn"
                               ascending:YES],
 [NSSortDescriptor sortDescriptorWithKey:@"name"
                               ascending:YES],
 nil];
[request setFetchBatchSize:15];
self.frc =
[[NSFetchedResultsController alloc] initWithFetchRequest:request
                                    managedObjectContext:cdh.context
                                      sectionNameKeyPath:@"locationAtHome.storedIn"
                                               cacheName:nil];
self.frc.delegate = self;
}

以及执行提取的代码:

- (void)performFetch {

if (self.frc) {
    [self.frc.managedObjectContext performBlockAndWait:^{
        NSError *error;
        [self.frc performFetch:&error];
        if (error) NSLog(@"%@ '%@' %@ (Reason: %@)",
                         self.class, NSStringFromSelector(_cmd),
                         error.localizedDescription, error.localizedFailureReason);

        [self.tableView reloadData];
    }];
}
}
4

1 回答 1

1

问题不在于使用 as 的属性sectionNameKeyPath发生了变化,而是相关对象中的属性发生了变化。

获取的结果控制器仅跟踪对获取的对象本身(在您的情况下为Item对象)的更改,而不是对相关对象的更改。

唯一的解决方案(据我所知)是将部分作为附加属性添加到Item实体,即使这意味着您有重复的数据。

于 2013-03-03T11:27:06.653 回答