【发布时间】:2012-08-27 12:58:12
【问题描述】:
编辑标题
我正在使用 Core Data 来存储从我的服务器收集的一些数据。在appDelegate 的applicationDidBecomeActive 中,我检查应用程序是否需要下载新数据(从我服务器上的版本变量)。如果它有旧信息,它会下载新数据。
问题是,在我的某些观点中,我有tableViews。这些数据是从Core Data 中的viewDidLoad 中提取的一组数据中获取的。
打开应用程序时,viewDidLoad 已经被调用,然后它更新了Core Data 中的数据,当我用tableView 输入视图时,所有行都是错误的。就我而言,所有行都显示与第一行相同的图像,并且没有任何文本。我在想旧数组有一些损坏的数据需要重新加载。在我写这篇文章时,我意识到需要再次调用viewDidLoad。或者至少是viewDidLoad 中的代码。我不想将其移至viewDidAppear 或willAppear,因为这意味着每次都会发生这种情况。
我考虑过强制重启进程,但我读到这是不可能的,Apple 无论如何都会拒绝强制退出。
实际上,我只需要知道如何以编程方式从AppDelegate 卸载所有视图,这样他们就必须再次调用viewDidLoad。或者再次强制viewDidLoad。
【问题讨论】:
-
您应该为表格视图使用
NSFetchedResultsController。 FRC 自动跟踪对托管对象上下文的更改。 -
@MartinR - 是的,我可能应该......但从一开始我就编写了代码来从 NSArray 中获取数据,并在 viewDidLoad 中使用 fetchRequest。我有五个 tableviews 这样做,直到我意识到我应该使用 Core Data。这是我的应用程序的最后一个错误(当前),唯一缺少的是“卸载所有视图”-命令,或“下次强制 viewDidLoad”-命令。
-
您可以将代码从
viewDidLoad移动到单独的方法updateData方法中。在viewWillAppear然后您可以检查if (needUpdate) [self updateData];。 - 篡改视图控制器的视图听起来不是一个好主意。 -
听起来是个好主意。谢谢。将尝试弄清楚如何设置/检查需要更新。
-
... 或注册
NSManagedObjectContextObjectsDidChangeNotification并仅在发布该通知时重新加载数据。
标签: objective-c cocoa-touch viewdidload viewdidunload appdelegate