XML Parse 后未在 UITableView 中获取当前数据(使用 NSFetchedResultsController)

Posted

技术标签:

【中文标题】XML Parse 后未在 UITableView 中获取当前数据(使用 NSFetchedResultsController)【英文标题】:Not getting current data in UITableView after XML Parse (using NSFetchedResultsController) 【发布时间】:2012-05-04 15:00:38 【问题描述】:

这里有点挣扎……

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

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

我的 tableview 的内容是由 NSFetchedResultsController 管理的,它显示这个核心数据。

我的问题:

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

也许我只是没有在正确的地方执行 reloadData?我已经实现了

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

    无跟踪:委托设置为 nil。 控制器只是提供对执行 fetch 时数据的访问。

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

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

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

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

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

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

祝你好运

【讨论】:

是的,就是这样。解析完成后我不得不再次执行Fetch。

以上是关于XML Parse 后未在 UITableView 中获取当前数据(使用 NSFetchedResultsController)的主要内容,如果未能解决你的问题,请参考以下文章

登录后未在 Oauth2ClientContext 中设置 OAuth2AccessToken

调用 log4net 包装器方法后未在日志中获取文件名和行号

以编程方式选择行后未调用 UITableView didSelectRowAtIndexPath

数据未在 UITableView 中加载。可能是啥问题?

触摸事件未在 UITableView 上触发

未在 android 中使用 parse.com 获取推送通知