1

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

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

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

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

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

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

4

1 回答 1

1

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

NSUserDefaults 类参考

示例代码:

#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]
}
于 2012-10-18T03:42:56.623 回答