1

我有两个要解决的问题,一个是刷新选项卡控制器本身,另一个是刷新选项卡控制器的内容。

我希望刷新选项卡控制器本身的原因是我的应用程序有一个 Web 调用,它返回一个 JSON,它设置选项卡的顺序并设置每个选项卡的内容。我已经知道了,这样当您退出应用程序并重新进入应用程序时,选项卡控制器会通过放置来刷新

exit(0)

在 AppDelegates ApplicationDidEnterBackground 中,这样当用户退出并再次进入时,控制器将被刷新。在 applicationDidFinishLaunchingWithOptions 中,我设置了一个 Web 调用,该调用调用 JSON,然后用于设置 Tab 键顺序。我知道这不是这样做的好方法,但就目前而言,这是我能想到的唯一解决方案。我还能如何刷新 TabController?

至于选项卡内容,使用此代码刷新

   becomeActiveObserver = [[NSNotificationCenter defaultCenter] 
                         addObserverForName:UIApplicationDidBecomeActiveNotification
                         object:nil 
                         queue: nil 
                         usingBlock:^(NSNotification *note){ 

                          [self refresh];
                          [self viewDidUnload];
                         }]; 

我已经为 5 个选项卡中的每一个设置了这种类型的代码。这很好用,但问题是只有在退出并再次访问应用程序时才会刷新内容。网络呼叫将是定期的,我希望在进行网络呼叫时内容会自行刷新,而无需我退出并再次进入应用程序。

出于测试目的,我在我的设置屏幕中设置了一个按钮(设置屏幕只是我的一个选项卡中的另一个视图),当点击读取 JSON 时,它存储在 iPhone 目录中,这与从网络调用中检索到的 JSON 不同(让我不必去服务器并在那里不断更改 JSON)。单击此按钮时,它应该读取这个新的 JSON,更新内容,然后刷新视图。我已经对此进行了测试,并且正在读取 JSON 并且正在更新数据(我在每个屏幕上设置了一个按钮,该按钮将读出它用来确认这一点的 JSON),但是在我退出并输入之前,视图不会刷新再次申请。

我在设置屏幕中设置的用于读取存储在设备上的 JSON 的临时代码是

-(IBAction)RefreshApp:(id)sender{     



NSFileManager *fileManager = [NSFileManager defaultManager];

     NSString *filePath = [[NSBundle mainBundle] pathForResource:@"widgjson" ofType:@"json"];  
     NSData *myData = [NSData dataWithContentsOfFile:filePath];  
     NSString *responseString = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];   

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *docDir = [paths objectAtIndex: 0];
        NSString *docFile = [docDir stringByAppendingPathComponent: @"json.txt"];
        [fileManager removeItemAtPath:docFile error:NULL];
        [responseString writeToFile:docFile atomically:NO encoding:NSUTF8StringEncoding

DashboardVC *db = [[DashboardVC alloc] init];
    [db refresh];
    [db viewDidUnload];

}

在底部,您可以看到我尝试从其中一个选项卡调用 refresh 以刷新其中一个视图,看看是否有效,但没有运气。刷新代码似乎仅在您从类本身内部调用它时才起作用,从另一个类访问它时我似乎无法刷新它。

进行网络呼叫时,我希望立即刷新每个选项卡。关于我将如何做到这一点的任何想法?

如果有人能指出我正确的方向,将不胜感激。

4

1 回答 1

2

UITabBarController 的setViewControllers: animated:方法就是你要在这里使用的。

当您收到要重新排序选项卡的通知时,使用该函数以数组的形式传递选项卡栏中拥有(和引用)的各种视图控制器,该数组按照您希望选项卡的顺序排列出现。

于 2012-05-18T07:55:08.720 回答