我已经搜索了一整天来寻找一个简单的例子,但还没有找到。我正在开发一个应用程序,我想在初始加载时进行 API 调用并填充一些可在任何选项卡视图中访问的变量。
示例:我想进行一次 API 调用来获取我的数据,其中将包括与警报选项卡的警报相关的数据。我想在初始加载时使用此数据来更新“警报”选项卡徽章。但是,一旦用户转到该选项卡,我还想在警报页面上使用该信息,而无需再次调用 API 来再次获取相同的信息。
我已经阅读了大量不符合我要求的解释,所以我正在寻找一个很好的例子来帮助我。
我已经搜索了一整天来寻找一个简单的例子,但还没有找到。我正在开发一个应用程序,我想在初始加载时进行 API 调用并填充一些可在任何选项卡视图中访问的变量。
示例:我想进行一次 API 调用来获取我的数据,其中将包括与警报选项卡的警报相关的数据。我想在初始加载时使用此数据来更新“警报”选项卡徽章。但是,一旦用户转到该选项卡,我还想在警报页面上使用该信息,而无需再次调用 API 来再次获取相同的信息。
我已经阅读了大量不符合我要求的解释,所以我正在寻找一个很好的例子来帮助我。
使用您UITabBarViewController
的viewControllers
属性访问标签栏控制器中的视图控制器数组。根据您的标签栏控制器架构对它们进行类型转换。然后使用该数组获取指向任何视图控制器的指针。
例如,假设您的选项卡栏控制器有 5 个选项卡,每个选项卡都有一个作为根视图控制器的UINavigationController
特定选项卡。UIViewController
假设您要将第三个选项卡的徽章值设置为您的网络响应数组计数。你可以这样做
[[[self.tabviewController viewControllers] objectAtIndex:2]
setBadgeValue:[NSString stringWithFormat:@"%d",[myArray count]];
您还可以通过类型转换视图控制器来获取特定视图控制器的属性。例如
MyViewController *myVc = (MyViewController*) [[(UINavigationController*)[[self.tabviewController viewControllers] objectAtIndex:2] viewControllers] objectAtIndex:0];
[myVc setPropertyName:propertyValue];
我从昨天开始就输入了这个问题,并确保在发布之前进行搜索。我发现没有类似的问题有答案,它可能非常简单,或者这不是解决问题的方法,但这是我解决这个问题的方法:使用NSUserDefaults和此页面上的代码示例
将所有这些变量放在一个类中,并随时访问它的共享实例。添加
+ (YourClass *)sharedObject
{
static YourClass *sharedClassObject = nil;
if (sharedClassObject == nil) {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedClassObject = [[YourClass alloc] init];
//Initialise it here if necessary
});
}
return sharedClassObject;
}
要访问共享实例,只需使用[YourClass sharedObject]
.
将数据放入您的应用委托对象中。您可以通过 ,从应用程序中的任何位置访问它(MyAppDelegate *)[[UIApplication sharedApplication] delegate]
,或者您可以为每个视图控制器提供指向它的显式链接。
NSUserDefaults 并不是真正用于在您的应用程序中全局共享数据,尽管它可以完成工作。如果您的应用程序下次无法连接到服务器,它还有一个好处是信息会保留。这是好事还是坏事?
您应该使用 NSNotificationCenter 来发布新数据到达的通知,并将您的新数据作为对象发布。
每个需要该对象的 viewController 都应该订阅该通知并使用新数据。