以编程方式卸载iOS设备上的所有视图

时间:2012-09-02 14:42:59

标签: objective-c cocoa-touch viewdidload viewdidunload appdelegate

编辑标题

我正在使用Core Data来存储我从服务器收集的一些数据。在appDelegate的{​​{1}}中,我检查应用是否需要下载新数据(来自我服务器上的版本变量)。如果它有旧信息,则下载新数据。

问题是,在我的一些观点中,我有applicationDidBecomeActive。这些数据来自tableViewsCore Data中提取的一组数据中的数据。 打开应用程序时,viewDidLoad已被调用,然后它会更新viewDidLoad中的数据,然后当我使用Core Data输入视图时,所有行都是错误的。在我的例子中,所有行都显示与第一行相同的图像,并且它们都没有任何文本。我在想旧的数组有一些需要重新加载的损坏的数据。当我写这篇文章时,我意识到需要再次调用tableView。或者至少是viewDidLoad中的代码。我不想将其移至viewDidLoadviewDidAppear,因为这意味着每次都会发生这种情况。 我想过强制重启这个过程,但我读到这是不可能的,而且苹果公司拒绝强制退出。

实际上,我只需要知道如何以编程方式从willAppear卸载所有视图,这样他们就必须再次调用AppDelegate。或者再次强制viewDidLoad

1 个答案:

答案 0 :(得分:1)

如果你不能使用获取的结果控制器,你可以  注册NSManagedObjectContextObjectsDidChangeNotification

[[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(contextChanged:)
    name:NSManagedObjectContextObjectsDidChangeNotification
    object:theManagedObjectContext];

并仅在必要时重新加载数据:

- (void)contextChanged:(NSNotification *)note
{
    // reload your table data
}

不要忘记删除观察者,例如在dealloc

[[NSNotificationCenter defaultCenter] removeObserver:self]