这里对ObjectiveC和Cocoa来说还是一个新手。希望这个问题的答案是直截了当的,但不是很明显。
我有一个简单的应用程序,它使用几个文本字段来设置几个字符串,这些字符串在第三个文本字段中搜索字符串,结果显示在标签中。在本练习中,我使用的是-rangeOfString
NSString
方法。为了让事情变得更有趣,我决定添加一个复选框来进行区分大小写的搜索。
除了一件事之外,一切都很好:当应用程序启动时,复选框的状态和它“控制”的BOOL不同步。在IB中,复选框状态设置为on。复选框操作的目标是方法-(IBAction)checkboxChange
,它评估复选框状态并相应地设置BOOL。 BOOL创建的值为NO。
目前我在-awakeFromNib
中有一行代码将BOOL设置为YES。我所追求的是一种在加载应用程序时让复选框发送它的动作的方法,因此BOOL设置与复选框状态一致。我以为我可以在AppDelegate中使用-applicationDidFinishLoading
,但我不知道我如何引用那里的复选框。我还以为我可以在该方法中设置BOOL的值,但即使我已经导入.h文件,其中定义了BOOL,XCode会抱怨标识符未定义。
如果它是相关的,我的所有代码都在一个名为AppController的类中,而我根本就没有使用默认的AppDelegate。
感谢阅读和您的建议/答案!
答案 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]
}