我有两个要解决的问题,一个是刷新选项卡控制器本身,另一个是刷新选项卡控制器的内容。
我希望刷新选项卡控制器本身的原因是我的应用程序有一个 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 以刷新其中一个视图,看看是否有效,但没有运气。刷新代码似乎仅在您从类本身内部调用它时才起作用,从另一个类访问它时我似乎无法刷新它。
进行网络呼叫时,我希望立即刷新每个选项卡。关于我将如何做到这一点的任何想法?
如果有人能指出我正确的方向,将不胜感激。