gpt4 book ai didi

cocoa - 使用可变数组检索保存到 NSUserDefaults 的数组并更改值

转载 作者:行者123 更新时间:2023-12-03 17:52:57 25 4
gpt4 key购买 nike

NSUserDefaults 返回的值即使您将可变对象设置为值,也是不可变的。

有一个问题让我很困惑。

我保存了一个NSArray (不可变)进入用户默认值 setObject:forKey:然后同步。

我删除了保存代码并使用 NSMutableArray获取我保存的值,通过 objectForKey:

我对可变数组做了一些可变操作。我用[[userDefaults standardUserDefaults] objectForKey:]检索数组,它被我的操作更改,并且我同步。

但是当我再次运行程序时,数组没有改变!

我可以使用可变类来接收不可变类吗?它可以更改,并且会出现在内存中,并且从用户默认值检索的值也会更改。我不知道为什么。我同步了,但是plist文件没有改变。我不知道为什么。

代码:

    //NSLog(@"Hello, World!");
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
//NSArray *arr = @[@"1",@"2"];
//[ud setObject:arr forKey:@"arr"];
//[ud synchronize];
NSMutableArray *arr = [ud objectForKey:@"arr"];
NSLog(@"before %@",arr);
NSLog(@"%@",[arr class]);
[arr isKindOfClass:[NSMutableArray class]];
[arr removeObjectAtIndex:0];
NSLog(@"after %@",arr);
BOOL ans = [ud synchronize];
NSArray *arr2 = [ud objectForKey:@"arr"];
NSLog(@"retrieve from ud %@",arr2);

控制台:

2013-12-02 11:42:46.791 NSUserDefaultsDemo[24447:303] before (
1,
2)
2013-12-02 11:42:46.792 NSUserDefaultsDemo[24447:303] __NSArrayM
2013-12-02 11:42:46.792 NSUserDefaultsDemo[24447:303] after (
2)
2013-12-02 11:42:46.793 NSUserDefaultsDemo[24447:303] retrieve from ud (
2)

最佳答案

您没有像我想象的那样保存对 NSUserDefaults 的更改。

此代码有效:

NSArray *arr = @[@"Object 1", @"Object 2"];
[[NSUserDefaults standardUserDefaults] setObject:arr forKey:@"testArr"];

NSMutableArray *mArr = [NSMutableArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"testArr"]];
[mArr removeObjectAtIndex:0];
[[NSUserDefaults standardUserDefaults] setObject:mArr forKey:@"testArr"];

如果您不首先使用 setObject:forKey: 方法,则同步不会保存您的更改。顺便说一句,只有当您想确保在退出应用程序等时保存首选项时,您才需要手动调用同步。

关于cocoa - 使用可变数组检索保存到 NSUserDefaults 的数组并更改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20320275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com