Как читать строку из NSUserDefaults - PullRequest
8 голосов
/ 29 февраля 2012

У меня есть объект в корне 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];

Я хотел бы автоматически заполнить текстовое поле [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];

Ответы [ 3 ]

34 голосов
/ 29 февраля 2012

Вы можете записать значение в 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];
}

Вы можете установить значение по умолчанию с помощью registerDefaults:.И когда вы можете получить это значение, просто позвонив:

- (void)applicationDidFinishLaunching:(NSNotification *)notification
{
    // ...
    [[NSUserDefaults standardUserDefaults] registerDefaults:@{@"Person", defaultValue}]
    NSString *value = [[NSUserDefaults standardUserDefaults] stringForKey:@"Person"];
    [myTextField setStringValue:value];
    // ...
}
2 голосов
/ 29 февраля 2012

Если я правильно понимаю, вы сможете сделать то, что вам нужно, просто выполнив:

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

Справочная страница NSUserDefaults

1 голос
/ 29 февраля 2012
myTextField.text = [[NSUSerDefaults standardUserDefaults] objectForKey:myKey];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...