Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何从NSUserDefaults读取字符串_Objective C_Macos_Cocoa_Nsuserdefaults - Fatal编程技术网

Objective c 如何从NSUserDefaults读取字符串

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 =

我在plist的根目录下有一个对象,它存储对象和键(其中一个是从用户文本字段输入的)。我在写作和创造结构方面没有问题;它试图读取导致问题的值。下面是我用来写数据的代码,有人能告诉我如何读取字符串[val]和[myKey]吗

谢谢大家!

#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
):太棒了!工作完美。。。非常感谢!;-)我会支持你的回答,尽管我显然没有足够的影响力。再次感谢,非常感谢。