2012-02-29 95 views
7

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

谢谢!

#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]; 

我想自动填充文本框与[VAL],为[的myKey],如果用户在plist中已经信息。下面是我试图使用该代码:

- (void)applicationDidFinishLaunching:(NSNotification *)notification { 

    NSUserDefaults *defaults = [[NSUserDefaults standardUserDefaults] objectForKey:myKey]; 
    NSString *val = [defaults stringForKey:myKey]; 

    if (val == nil) val = defaultValue; 
    [myTextField setStringValue:val]; 
+0

这段代码是否实际编译? – sch 2012-02-29 13:26:14

+0

heh。是的,它没有问题,它一定不是那么糟糕,对吧? :-p – Devon 2012-02-29 13:43:10

+0

它不是一个iOS应用程序,它是我的.h文件中的OS X. – Devon 2012-02-29 13:48:26

回答

30

您可以将值写入NSUserDefault,如下所示:

[[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 
{ 
    // ... 
    NSString *value = [[NSUserDefaults standardUserDefaults] stringForKey:@"Person"]; 
    if (value == nil) value = defaultValue; 
    [myTextField setStringValue:value]; 
    // ... 
} 
+0

很酷,感谢您的改变;-) - 我现在就试试。 – Devon 2012-02-29 13:50:54

+0

它不喜欢.text - 我收到一个错误“属性文本”没有找到对象的类型NSTextField *' – Devon 2012-02-29 13:56:37

+0

是的,我改变它为'setStringValue'when你说它不是一个iOS应用程序:) – sch 2012-02-29 13:57:36

2

如果我理解正确的话,你应该能够做你需要通过简单地做:

NSString * val = [[NSUserDefaults standardUserDefaults] objectForKey: myKey]; 
[textfield setText: val]; 

NSUserDefaults Reference Page

+0

它输出我在上面定义的Textfield中的defaultValue“Your Name”,但是,如果此人以前输入了他们的名字,它应该读取它并使用该信息填充文本字段。不幸的是,它总是输出“你的名字”,所以显然不能正确读取,因为名字存储在plist中。 – Devon 2012-02-29 13:33:54

+0

由于它的功能直接来自框架,所以它不太可能被错误地读取。这很可能是你设置不正确。很难说,因为你发布的代码显然不是整个代码 - 它甚至不会编译。 我的猜测是你实际上设置了两次值 - 首先是[默认setObject ...],然后通过注册字典。你应该只做一次。 – 2012-02-29 13:39:11

+0

对不起,我发布了整个代码,如果有帮助。谢谢! – Devon 2012-02-29 13:42:19

1
myTextField.text = [[NSUSerDefaults standardUserDefaults] objectForKey:myKey];