Objective c 如何从NSUserDefaults读取字符串
我在plist的根目录下有一个对象,它存储对象和键(其中一个是从用户文本字段输入的)。我在写作和创造结构方面没有问题;它试图读取导致问题的值。下面是我用来写数据的代码,有人能告诉我如何读取字符串[val]和[myKey]吗 谢谢大家!Objective c 如何从NSUserDefaults读取字符串,objective-c,macos,cocoa,nsuserdefaults,Objective C,Macos,Cocoa,Nsuserdefaults,我在plist的根目录下有一个对象,它存储对象和键(其中一个是从用户文本字段输入的)。我在写作和创造结构方面没有问题;它试图读取导致问题的值。下面是我用来写数据的代码,有人能告诉我如何读取字符串[val]和[myKey]吗 谢谢大家! #define defaultValue @"Your Name" #define myKey @"PersonName" - (void)textFieldAction:(id)sender { NSUserDefaults *defaults =
#define defaultValue @"Your Name"
#define myKey @"PersonName"
- (void)textFieldAction:(id)sender {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *val;
// Get the new value from the textfield
val = [myTextField stringValue];
if ([val isEqualToString:defaultValue]) {
[defaults removeObjectForKey:myKey];
} else {
// [defaults setObject:val forKey:myKey];
NSDictionary *my_dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"Name", @"PersonName",
@"Email", @"PersonEmail",
@"Dept", @"PersonDept",
@"Job", @"PersonJob",
val, myKey,
@"Status", @"PersonStatus",
nil];
[defaults setObject: my_dict forKey: @"Person"];
[[NSUserDefaults standardUserDefaults] registerDefaults:my_dict];
如果用户在plist中已经有信息,我想用[val]为[myKey]自动填充文本字段。下面是我尝试使用的代码:
- (void)applicationDidFinishLaunching:(NSNotification *)notification {
NSUserDefaults *defaults = [[NSUserDefaults standardUserDefaults] objectForKey:myKey];
NSString *val = [defaults stringForKey:myKey];
if (val == nil) val = defaultValue;
[myTextField setStringValue:val];
如果我理解正确,您应该能够通过简单地执行以下操作来完成您需要的工作:
NSString * val = [[NSUserDefaults standardUserDefaults] objectForKey: myKey];
[textfield setText: val];
您可以将值写入
NSUserDefault
中,如下所示:
[[NSUserDefaults standardUserDefaults] setValue:[myTextField stringValue] forKey:@"Person"];
[myTextField setStringValue:[[NSUserDefaults standardUserDefaults] stringForKey:@"Person"];
然后像下面这样读:
[[NSUserDefaults standardUserDefaults] setValue:[myTextField stringValue] forKey:@"Person"];
[myTextField setStringValue:[[NSUserDefaults standardUserDefaults] stringForKey:@"Person"];
因此,您可以将代码简化为:
- (void)textFieldAction:(id)sender {
[[NSUserDefaults standardUserDefaults] setValue:[myTextField stringValue] forKey:@"Person"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
您可以使用注册表默认值:
设置默认值。当您可以通过调用来检索该值时:
- (void)applicationDidFinishLaunching:(NSNotification *)notification
{
// ...
[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"Person", defaultValue}]
NSString *value = [[NSUserDefaults standardUserDefaults] stringForKey:@"Person"];
[myTextField setStringValue:value];
// ...
}
这段代码真的编译了吗。是的,没有问题,一定没那么糟吧-pIt不是iOS应用程序,它是OS X。在my.h文件中,它是IBOutlet NSTextField*myTextField;好的,您仍然有问题吗?它在我上面定义的文本字段中输出默认值“Your Name”,但是,如果此人之前输入了自己的姓名,它应该读取该名称并用该信息填充文本字段。不幸的是,它总是输出“yourname”,因此显然无法正确读取,因为名称存储在plist中。不太可能读取错误,因为它是直接来自框架的函数。很可能是设置不正确。很难说,因为你发布的代码显然不是全部代码——它甚至不会编译。我的猜测是,您实际上设置了两次值-首先是通过[defaults setObject…],然后是通过注册字典。你应该只做一次。它不喜欢.text-我出错了“在NSTextField*类型的对象上找不到属性'text'”是的,当您说它不是iOS应用程序时,我将其更改为
setStringValue
):太棒了!工作完美。。。非常感谢!;-)我会支持你的回答,尽管我显然没有足够的影响力。再次感谢,非常感谢。