首页 > 解决方案 > 有没有办法使用全局静态字典可以访问objective-c ios中的所有视图控制器?

问题描述

我正在尝试实现一个能够访问所有类的静态全局字典。除了单例还有其他方法吗?我在堆栈溢出中尝试了很多我无法得到任何解决方案有人帮我解决这个问题。这是我的字典代码。

 NSDictionary *colors = @{@"black": [UIColor blackColor], @"pink": [UIColor purpleColor], @"blue": [UIColor blueColor], @"red": [UIColor redColor], @"yellow": [UIColor yellowColor]};

我在我的课堂上使用这样的用户默认值。

 NSString *savedValue = [[NSUserDefaults standardUserDefaults]
                            stringForKey:@"colordatafromthisvc"];
    UIColor *color = colors[savedValue] ?: [UIColor orangeColor];
        _nxtbtnlet.backgroundColor = color;

标签: iosobjective-csingleton

解决方案


始终认为最好将单例用于此类目的。

如果您被迫不使用单例,您可以使用:

选项1

.h文件中:

extern NSDictionary *GlobalDictionary;

.m文件中:

NSDictionary *GlobalDictionary;

然后,在相应.m文件的初始化函数(或任何其他在应用程序启动后肯定会调用的方法)中,您可以拥有:

GlobalDictionary = @{@"black": [UIColor blackColor], @"pink": [UIColor purpleColor], @"blue": [UIColor blueColor], @"red": [UIColor redColor], @"yellow": [UIColor yellowColor]};

您现在可以从包含其头文件的任何文件中访问GlobalDictionary ,如下所示:

UIColor *color = [GlobalDictionary objectForKey:@"blue"];

选项 2

考虑将UIColor本身保存到UserDefaults

看看这个:Saving UIColor to and loading from NSUserDefaults


推荐阅读