使用NSUserDefaults中保存的颜色设置视图的背景

时间:2013-08-03 21:01:48

标签: ios objective-c cocoa-touch nsuserdefaults

我有一个主视图控制器,一个“更改背景颜色”视图控制器和一个详细视图控制器。

当用户通过更改背景颜色视图控制器更改背景颜色时,我会执行以下操作:

 NSData *colorData = [NSKeyedArchiver archivedDataWithRootObject:currentColor];
 [[NSUserDefaults standardUserDefaults] setObject:colorData forKey:@"backgroundColor"];
 //currentColor is specified by user

通过以下方式更新到其他视图控制器:

NSData *colorData = [[NSUserDefaults standardUserDefaults] objectForKey:@"backgroundColor"];
UIColor *color = [NSKeyedUnarchiver unarchiveObjectWithData:colorData];
self.view.backgroundColor = color;

我遇到的问题是主视图控制器加载FIRST。当应用程序第一次加载时,当前所有内容都有白屏。我的问题是:如何更改它以便应用程序在每个视图控制器上加载绿​​色,并在用户指定颜色后停止显示绿色并开始显示指定的颜色?

我尝试使用viewDidLoad,但这不起作用,因为它只会覆盖NSUserDefaults设置。

2 个答案:

答案 0 :(得分:3)

-[NSUserDefaults registerDefaults:]就是你想要的东西。您使用您想要成为“默认值”的值调用它,然后其他调用者将获得这些值。 Reference here.您可能希望在应用的生命周期中提早运行,可能在– application:didFinishLaunchingWithOptions:

答案 1 :(得分:1)

至于您每次将背景设置为绿色的意图,直到用户在颜色选择视图中选择颜色为止,您是否希望每次将应用程序加载到前台或每次启动应用程序时都这样做?我想你可以在你的IB文件中设置它(如果你正在使用IB)或者viewDidLoad应该可以工作。

如果我理解你正在尝试做什么,你可以在NSUserDefaults中创建另一个项目以跟踪用户何时进行颜色选择,然后只是在你进入时检查这个标志{在将背景设置为所选颜色之前{1}}。但是,我问你何时想要这样做的原因是知道何时重置该标志。