好的,在进行网络通话后,我正在尝试刷新每个选项卡的选项卡内容,并且我尝试了很多不同的方法来做到这一点,但我已经记不清了。有人可以告诉我这是怎么可能的吗?
Web 调用只是从服务器调用 JSON 并使用它来更新选项卡的内容。出于测试目的,我在设置类中设置了一个按钮。设置类是主页选项卡中的一个视图,其中有一个名为刷新的按钮。单击此按钮时,设备上存储的 JSON 与应用程序启动时从 Web 调用中调用的不同。这让我不必更改服务器上的 JSON。
我将带您了解我尝试过的一些技术,如果有人能告诉我我做错了什么,我将不胜感激。
我尝试制作一个类的实例并像这样调用刷新方法
DashboardVC *db = [[DashboardVC alloc] init];
[db refreshMe];
仪表板类中的刷新方法是这样的
-(void) refreshMe
{
[self loadView];
[self viewDidLoad];
}
然而没有运气。如果我在 Dashboard 类中调用它,此方法将起作用,但如果我从另一个类调用它,则不会起作用。我认为它已经成为我正在实例化一个新类并调用它的刷新。所以我放弃了这种技术并转向下一个方法
这会遍历所有 tabBars 并更改 tabTitles 没有任何问题,所以我知道它肯定会正确循环 ViewControllers。
我还尝试了各种视图方法,如 ViewDidAppear、viewWillAppear 等,但没有运气。
我还尝试像这样通过 tabController 访问我在 dashBoard 类中创建的 refreshMe 方法
[[[self.tabBarController viewControllers] objectAtIndex:0] refreshMe];
但同样没有运气,这只会导致我的应用程序崩溃。
我通读了本指南
在苹果网站上,但似乎没有涵盖如何刷新单个标签内容。
我只想让每个单独的选项卡在进行网络通话后刷新其内容,并且花了很长时间试图弄清楚这一点,但没有任何效果。
如果有人能告诉我我做错了什么,我将不胜感激?
提前谢谢....
编辑:
扩展我尝试过的内容
在与 Michael 讨论后,我意识到您永远不应该根据 Apple 指南调用 loadView。所以我删除了对 LoadView 的所有引用。我现在在所有主要的 ViewController 中放置了一个名为 RefreshMe 的方法,它在类中设置视图、图像文本等。而这个方法是放在ViewDidLoad里面的。现在我希望能够在发生网络调用后调用这些方法,从而有效地刷新应用程序。
我的 viewDidLoad 现在在我所有的主要课程中看起来都是这样的。
- (void) viewDidLoad {
[super viewDidLoad];
[self refreshMe];
}
然后 refreshMe 方法包含设置屏幕的代码。
从 Web 调用中提取的 JSON 数据将设置 5 个选项卡中每个选项卡的内容,因此需要在 Web 调用后将它们全部刷新。
我尝试遍历 viewControllers 并调用 viewDidLoad,这又应该调用设置类的 refreshMe 方法,但是没有任何反应。我使用的代码是这个
NSArray * tabBarViewControllers = [self.tabBarController viewControllers];
for(UIViewController * viewController in tabBarViewControllers)
{
[viewController viewDidLoad];
}
暂时我也包括了
NSLog(@"Method called");
在每个类的 viewDidLoad 中测试它是否被调用。但是,仅当我第一次加载应用程序或重新输入应用程序时才会打印出该消息。在我单击设置屏幕中的刷新按钮后应该调用此方法,但它不是,我不知道为什么。
任何人都知道为什么这不起作用?