从iPhone的核心数据在tableview中一一添加单行

Posted

技术标签:

【中文标题】从iPhone的核心数据在tableview中一一添加单行【英文标题】:Adding single row one by one in tableview from core data of iPhone 【发布时间】:2010-05-09 18:24:54 【问题描述】:

我正在开发 RSS 阅读器代码,可以在其中下载文章并可以离线查看。 问题是只有在所有文章都被下载后,包含标题的表格视图才会更新。使用核心数据。因此,每次保存 NSobjectcontext 时,都会调用 [self tableview updatebegins]。该表正在通过 fetchcontroller 核心数据进行更新。

我尝试在每次保存文章时保存 NSobjectcontext,但这并没有更新 tableview。我想要一种类似于 instapaper tableview 的机制,其中保存文章并立即更新 tableview。如果您知道解决方案,请提供帮助。提前致谢。


添加代码以便更好地理解

AppDelegate.m 包含以下代码

- (void)feedSuccess:(ZSURLConnectionDelegate*)delegate

  NSManagedObjectContext *moc = [self managedObjectContext];

  CXMLElement *root = [document rootElement];
  CXMLElement *channel = [[root elementsForName:@"channel"] lastObject];

  NSFetchRequest *request = [[NSFetchRequest alloc] init];
  [request setEntity:[NSEntityDescription entityForName:@"FeedItem" inManagedObjectContext:moc]];
   for (CXMLElement *item in [channel elementsForName:@"item"])    
    
   // push element in core data and then save context
   //Save context 
    [moc save:&error];
  ZAssert(error == nil, @"Error saving context: %@", [error localizedDescription]);
  

这会触发 RootviewController.m 中的表更改代码

  - (void)controllerWillChangeContent:(NSFetchedResultsController*)controller 

  [[self tableView] beginUpdates];

【问题讨论】:

【参考方案1】:

如果你使用NSFetchedResults控制器,只需使用它的委托方法

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller;

如下:

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller 
// In the simplest, most efficient, case, reload the table view.
    [self.tableView reloadData];

每次更新底层NSManagedObjectContext,表也会自动更新。

【讨论】:

我试过你的代码。当元素被推送(上下文被保存)时,函数 controllerDidChangeContent 会被调用,但 tableview 没有得到更新。请帮忙。

以上是关于从iPhone的核心数据在tableview中一一添加单行的主要内容,如果未能解决你的问题,请参考以下文章

从本地存储中一一检索数组列表

从 Listbox 中一一选择项目

iphone SDK:使用核心数据对任意 tableview 行重新排序

iPhone - UITableViewController 和核心数据行在 tableView 中重复

java - 如何使用Java从文件夹中的所有文件中一一读取数据? [复制]

从 iphone 的核心数据中删除对象时应用程序崩溃