从返回的值NSUserDefaults
是不可变的,即使您将可变对象设置为值。
有一个问题让我感到困惑。
我将一个NSArray
(不可变的)保存到用户默认值中setObject:forKey:
,然后同步。
我删除了保存代码,并使用 anNSMutableArray
来获取我保存的值,通过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)