【发布时间】: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