如何重新加载将在一个视图上显示的数据

时间:2012-08-21 07:14:14

标签: ios uiview uiviewcontroller reload subview

一个视图是一个视图控制器的子视图。此视图将显示存储在一个plist文件中的一些数据。但是,此plist文件将在下一个视图控制器上更改。当屏幕从下一个视图控制器返回到具有惯用视图作为子视图的上一个视图控制器时,数据将不会刷新。在这种情况下,我该如何解决?并且网络上提供了几种解决方案

第一个解决方案:

if(self isViewLoaded)
{
    self.view = nil;
    [self viewDidLoad];
}

此解决方案存在一个问题,即控制器的视图为黑色,不会显示任何其他视图。但是,如果我删除以下代码,则可以刷新视图上的数据。

self.view = nil;

然而,有一个问题,我可以在这一层下看到一些单词。我猜它会在旧图层上方创建新图层。因为一些较轻的单词不是当前版本plist文件中的数据而不是以前的版本plist文件在此子视图上

第二个解决方案:

[self.view setNeedsDisplay];

此代码没有任何功能。

1 个答案:

答案 0 :(得分:0)

您可以使用“下一个视图控制器”中的NSNotificationCenter postNotifcation。

E.g:

-(void)updatePLISTData
{
    // code to download new data for PLIST

    [[NSNotificationCenter defaultCenter] postNotificationNamed:@"notif_plistChanged" .... object:thePlistObject ];
}

确保您记得将“观察者”添加到推动“下一个视图控制器”的“父视图控制器”。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updatePlist:) object:nil];

并删除观察者

-(void)dealloc
{
   [[NSNotificationCenter defaultCenter] removeObserver:self];
   ...
   [super dealloc];
}

收到通知后,通知将调用您添加观察者时指定的任何方法。在这种情况下,你有

-(void)updatePlist:(NSNofitication *)paramPlist
{
    self.plist = paramPlist;
}