【问题标题】:Update NSArray stored in NSUserDefaults更新存储在 NSUserDefaults 中的 NSArray
【发布时间】:2023-03-24 06:53:01
【问题描述】:

是否可以更新存储在 NSUserDefaults 中的名为 customerName 的数组?

这是我目前的代码:

accounts = [NSUserDefaults standardUserDefaults];

NSArray *customerName = [[NSArray alloc] initWithObjects:@"J BLOGGS", @"J BLOGGS", nil];
[accounts setObject:customerName forKey:@"customerName"];
[accounts synchronize];

NSLog(@"%@", [[accounts objectForKey:@"customerName"] objectAtIndex:0]);

【问题讨论】:

    标签: ios objective-c nsarray nsuserdefaults


    【解决方案1】:

    有可能,您必须检索不可变数组并制作可变副本,然后将其写回用户默认值。

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    NSArray *customerNames = [userDefaults objectForKey:@"customerName"];
    NSMutableArray *mCustomerNames = [customerNames mutableCopy];
    mCustomerNames[0] = @"Some Other Name";
    [userDefaults setObject:mCustomerNames forKey:@"customerName"];
    [userDefaults synchronize];
    

    【讨论】:

    • 当我重新加载我的应用程序时,这似乎有问题,它会重新加载我的旧值:S
    • 您确定在设置新值后调用同步吗?
    • 是的,我确实是/。可能是我将我的默认值声明为属性吗? @property(非原子,保留)NSUserDefaults *accounts;
    • 查看您在应用启动时首次保留客户名称的方式。也许您每次启动应用程序时都使用旧值重新创建数组并将其保存到用户默认值中。
    • 是的,它有效,但完全糟糕透了。如果您的 userDefaults .plist 中有相当深的层次结构 - 那么您必须在每次想要更改最低级别节点的值时读取并替换顶层的整个层次结构。它不仅效率低下,而且不能“KVO”(观察)较低级别条目的更改。只有顶级项目。我想知道为什么 Apple 没有在其 UserDefaults 的 KVO/KVC 合规性方面投入更多资金。 (支持s​​et/get Value:forKeyPath:)
    猜你喜欢
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多