【问题标题】:Preferred method for storing data fetched from Core Data (iOS)存储从 Core Data (iOS) 获取的数据的首选方法
【发布时间】:2012-12-05 03:18:57
【问题描述】:

假设我正在构建一个显示联系人 UITableView 的应用。用户的联系人存储在远程服务器上。我从服务器获取用户的联系人并将它们存储在 Core Data 中。

我的 UITableViewController 加载并从 Core Data 中获取一组 NSManagedObject 子类(名为 ContactVO)。我使用这个 ContactVO 数组来填充我的 UITableView。然后我向服务器发出请求,以提取用户的最新联系人列表。当我收到来自服务器的响应时,我会从我的 Core Data 存储中删除所有联系人,然后插入从服务器数据创建的联系人。此时,我通知我的 UITableViewController 数据已更改,并通过委托方法将新联系人传递给它。

问题:一旦我从 Core Data 中删除联系人,对存储在我的 UITableViewController 中的 ContactVO 的引用就是垃圾。

这里的想法是让表格视图始终允许用户交互,但始终显示可用的最新联系人。

我尝试过的事情:

  • 创建一个与 ContactVO 具有所有相同属性的类 (Contact),并使用从 Core Data 获取的数据填充该类的实例,然后将一组 Contact 对象返回到我的 UITableViewController

  • 为每个获取的 ContactVO 创建一个 NSDictionary,并将一个字典数组返回到我的 UITableViewController

必须有比这两种方法更好的方法。存储 fetch 请求结果的首选方法是什么?

【问题讨论】:

  • 可能我不是很理解你的问题,但这听起来很正常,一旦数据源发生变化,你必须调用[yourTable reloadData],然后你就全部刷新了。此外,您可以使用 NSManagedObject 数组,而无需拥有类似的类。或者就像其他建议的那样,使用 NSFetchedResultsController,在这种情况下,只需记住在批量更新时设置 delegate = nil,然后在完成时设置 delegate=self。

标签: objective-c ios core-data nsmanagedobject


【解决方案1】:

您应该阅读有关NSFetchedResultsController 的信息,它是delegate。它可以帮助您在模型发生更改(删除、添加、修改对象)时刷新表中显示的数据。你也可以在 Xcode 中找到一个示例项目,我相信它叫做 Core Recipes。

希望这会有所帮助!

【讨论】:

  • 这似乎是一个可靠的解决方案。不幸的是,我当前的视图控制器比上述场景复杂得多。在您的 tableview 的数据基于一个获取请求的情况下,NSFetchedResultsController 看起来是一个有用的类。我将此答案标记为正确,因为我相信这是对我发布的问题的正确答案。不过,我很想听听更多建议。
猜你喜欢
  • 2018-09-17
  • 1970-01-01
  • 1970-01-01
  • 2019-05-24
  • 2012-03-29
  • 2014-11-08
  • 1970-01-01
  • 2014-09-27
  • 1970-01-01
相关资源
最近更新 更多