1

在这里有点挣扎……

我的视图控制器遵循以下协议

在我的 init 方法中,我将检查远程服务器以获取更新的 XML 文件...解析 XML 文件,并将内容写入核心数据。

我的 tableview 的内容由显示此核心数据的 NSFetchedResultsController 管理。

我的问题:

NSFetchedResultsController 似乎在从远程文件更新核心数据之前获取数据。我已经验证数据库正在正确更新,如果我第二次运行 TableView 将显示正确的数据。

也许我只是没有在适当的地方做 reloadData ?我已经实施

-(void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
    [myTableView reloadData];
}

此外,在解析器完成并将新数据写入核心数据后,我正在尝试这样做:

-(void)parserDidEndDocument:(NSXMLParser *)parser {
     [myTableView reloadData];  
}

有人有想法么?让我知道发布哪些额外代码可能有用。谢谢!

4

1 回答 1

1

您可能需要检查以下内容(来自 Apple 的文档)

因此,控制器有效地具有三种操作模式,由它是否具有委托以及是否设置了缓存文件名来确定。

  1. 无跟踪:委托设置为零。控制器只是提供对数据的访问,就像执行获取时一样。

  2. 仅内存跟踪:委托为非 nil,文件缓存名称设置为 nil。控制器监视其结果集中的对象并更新部分和排序信息以响应相关更改。

  3. 完全持久跟踪:委托和文件缓存名称非零。控制器监视其结果集中的对象并更新部分和排序信息以响应相关更改。控制器维护其计算结果的持久缓存。

听起来您想要完整的持续跟踪。所以你可能想确保你有委托集(你可能已经完成了)并将缓存设置为非零

您可能还想确保在完成解析后保存 managedObjectContext。保存后,请确保再次执行提取。

NSError *error;
BOOL success = [controller performFetch:&error];
if (!success)
  NSLog(@"Core Data Fetch Error:  %@"error);

可能是应用程序在退出时正在保存上下文,这就是您在重新启动时看到数据的原因。

祝你好运

于 2012-05-04T15:25:32.787 回答