无法更新NSUserDefaults NSMutableDictionary对象

时间:2013-09-20 11:51:00

标签: xcode cocoa nsmutablearray nsuserdefaults nsmutabledictionary

我正在尝试更新保存在UserDefaults中的词典。

但是,它只是不想更新给定索引处的Object。我不知道为什么。具有它的值的对象保持不变。

代码:

- (void) saveUser
{

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    NSMutableArray *users = [[NSMutableArray alloc] initWithArray:[defaults objectForKey:@"users"]];

    BOOL userAlreadyAdded = FALSE;
    NSUInteger count = 0;

    for (NSMutableDictionary *user in users) {

        if ([[user objectForKey:@"username"] isEqualToString:[defaults objectForKey:@"username"]]) {

            NSLog(@"User found: %@", user);

            [user setObject:sid forKey:@"sess"];
            [user setObject:mid forKey:@"seca"];
            [users replaceObjectAtIndex:count withObject:user];

            userAlreadyAdded = TRUE;

        }

        count++;

    }

    if (!userAlreadyAdded) {

        NSMutableDictionary *userToAdd = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
            [defaults objectForKey:@"username"], @"username",
            sid, @"sess",
            mid, @"seca",
            nil];

        [users addObject:userToAdd];

    }

    NSLog(@"USERS TO SAVE: %@", users);

    [defaults setObject:users forKey:@"users"];

    [defaults synchronize];
}

2 个答案:

答案 0 :(得分:1)

  

即使您设置了一个,NSUserDefaults返回的值也是不可变的   可变对象作为值。例如,如果您设置了一个可变字符串   作为“MyStringDefault”的值,您以后检索的字符串   使用stringForKey:将是不可变的。

尝试删除对象并重新添加。

答案 1 :(得分:0)

为每个用户创建一个Mutable Dictionary,就像你已经使用'users'(initWithArray)做的那样。

NSMutableDictionary * mutableUser = [NSMutableDictionary dictionaryWithDictionary:user];

此外,我并不完全确定您可以安全地假设您的计数索引处的对象是您期望的对象,因为for in循环枚举的方式不同。我会使用setObjectForKey,而不是replaceAtIndex。