在应用程序启动时使用复选框设置BOOL的值?

时间:2012-10-18 03:06:05

标签: objective-c cocoa checkbox interface-builder boolean

这里对ObjectiveC和Cocoa来说还是一个新手。希望这个问题的答案是直截了当的,但不是很明显。

我有一个简单的应用程序,它使用几个文本字段来设置几个字符串,这些字符串在第三个文本字段中搜索字符串,结果显示在标签中。在本练习中,我使用的是-rangeOfString NSString方法。为了让事情变得更有趣,我决定添加一个复选框来进行区分大小写的搜索。

除了一件事之外,一切都很好:当应用程序启动时,复选框的状态和它“控制”的BOOL不同步。在IB中,复选框状态设置为on。复选框操作的目标是方法-(IBAction)checkboxChange,它评估复选框状态并相应地设置BOOL。 BOOL创建的值为NO。

目前我在-awakeFromNib中有一行代码将BOOL设置为YES。我所追求的是一种在加载应用程序时让复选框发送它的动作的方法,因此BOOL设置与复选框状态一致。我以为我可以在AppDelegate中使用-applicationDidFinishLoading,但我不知道我如何引用那里的复选框。我还以为我可以在该方法中设置BOOL的值,但即使我已经导入.h文件,其中定义了BOOL,XCode会抱怨标识符未定义。

如果它是相关的,我的所有代码都在一个名为AppController的类中,而我根本就没有使用默认的AppDelegate。

感谢阅读和您的建议/答案!

1 个答案:

答案 0 :(得分:1)

NSUserDefaults是您在应用程序启动时保持首选项状态的最佳朋友。确保在进行更改后调用synchronize方法将其保留到磁盘。在某些情况下,您可能希望延迟同步,直到应用程序即将进入后台状态。

NSUserDefaults Class Reference

示例代码:

#define USER_DEFAULT_CASE_SENSITIVE @"USER_DEFAULT_CASE_SENSITIVE"

-(IBAction)checkboxChange {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setBool:self.caseSensitive.on forKey:USER_DEFAULT_CASE_SENSITIVE];
    [defaults synchronize];
}

要在应用再次启动时恢复它:

- (void)viewDidLoad {
    [super viewDidLoad];
    // other code

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    self.caseSensitive.on = [defaults boolForKey:USER_DEFAULT_CASE_SENSITIVE]
}