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

时间:2012-05-04 15:00:39

标签: uitableview core-data ios5 nsfetchedresultscontroller

在这里苦苦挣扎......

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

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

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

我的问题:

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

  

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

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

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

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

  6.   

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

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

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

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

祝你好运