0

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

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

代码:

- (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];
}
4

2 回答 2

1

从 NSUserDefaults 返回的值是不可变的,即使您将可变对象设置为值。例如,如果您将可变字符串设置为“MyStringDefault”的值,那么您稍后使用 stringForKey: 检索的字符串将是不可变的。

尝试删除该对象并再次添加它。

于 2013-09-20T11:55:21.330 回答
0

为每个用户创建一个可变字典,就像你已经对'users'(initWithArray)所做的那样。

NSMutableDictionary* mutableUser = [NSMutableDictionary dictionaryWithDictionary:user];

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

于 2013-09-20T12:31:31.163 回答