我有两个完全独立的任务正在执行但不知何故他们似乎连接。
在ViewController 1中,我有:
NSString *foo = @"foo";
NSUserDefaults *default1 = [NSUserDefaults standardUserDefaults]
[default1 setObject:foo forKey:@"foo"];
[default1 synchronize];
当我这样做时:
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"foo"]);
印刷的价值是我所期望的。
在ViewController 2中,我有:
NSString *bar = @"bar";
NSUserDefaults *default2 = [NSUserDefaults standardUserDefaults]
[default2 setObject:bar forKey:@"bar"];
[default2 synchronize];
同样,当我NSLog它时,价值就是我所期望的。
但不知何故,当我尝试再次打印对象@"foo"
时,它会为我提供第二个对象的值,在本例中为@"bar"
关于为什么我的原始值被第二个值覆盖的任何指导,即使两个类中的变量/键名称有所不同?
答案 0 :(得分:1)
你这两个都是这样做的:
[foo setObject:bar forKey:@"bar"];
不应该是:
[defaults1 setObject:foo forKey:@"foo"];
和
[defaults2 setObject:bar forKey:@"bar"];
然而,有一个更大的问题:
NSString *foo = @"foo";
NSUserDefaults *default1 = [NSUserDefaults standardUserDefaults];
[default1 setObject:foo forKey:@"foo"];
[default1 synchronize];
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"foo"]);
NSString *bar = @"bar";
NSUserDefaults *default2 = [NSUserDefaults standardUserDefaults];
[default2 setObject:bar forKey:@"bar"];
[default2 synchronize];
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"bar"]);
无法正常工作,但是您创建的defaults1
和defaults2
都是标准默认值的实例,因此:
NSUserDefaults * defaults1 = [NSUserDefaults standardUserDefaults];
NSUserDefaults * defaults2 = [NSUserDefaults standardUserDefaults];
[NSUserDefaults standardUserDefaults];
所有指向standardUserDefaults
单身的指针。所以它们是相同的实例。你可以这样做:
NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
NSString *foo = @"foo";
[standardDefaults setObject:foo forKey:@"foo"];
NSString *bar = @"bar";
[standardDefaults setObject:bar forKey:@"bar"];
[standardDefaults synchronize];
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"foo"]);
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"bar"]);
答案 1 :(得分:1)
您可以使用此代码
打印出整套用户默认设置NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDictionary *dictionary = [defaults dictionaryRepresentation];
NSLog( @"%@", dictionary );
请注意,Apple会在用户默认设置中添加大量垃圾,因此您必须滚动到最后才能看到foo
和bar
。我猜你的代码中有一个拼写错误,你没有向我们展示过,而且foo
被覆盖了,或foo
没有正确显示。
您问题中的当前代码(1次编辑后)都很好,应该可以正常工作。