变更记录
序号 | 录入时间 | 录入人 | 备注 |
---|---|---|---|
1 | 2016-06-16 | Alfred Jiang | - |
方案名称
语法 - 通过 registerDefaults 实现单次记录需求
关键字
语法 \ NSUserDefaults \ registerDefaults \ 单次记录
需求场景
- 需要实现单次记录的需求场景,避免重复赋值与重复记录
参考链接
详细内容
registerDefaults 方法调用时会先检查 NSUserDefaults 中是否已经存在相同的 Key ,如果存在则不会把其覆盖。 该特性可以很好的用于记录单次运行的需求,当某 Key 已经被赋值后,避免重复赋值和多次赋值。
示例代码:
// [NSUserDefaults standardUserDefaults] 不包含 TEST_KEY
NSLog(@"Log 0 : %@",[[NSUserDefaults standardUserDefaults] objectForKey:TEST_KEY]);
// 通过 registerDefaults: 设置 TEST_KEY 值为 @"TEST_VALUE_0"
NSDictionary *defaultValues0 = [NSDictionary dictionaryWithObjectsAndKeys: @"TEST_VALUE_0", TEST_KEY,nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues0];
// 此时 TEST_KEY 值为 @"TEST_VALUE_0"
NSLog(@"Log 1 : %@",[[NSUserDefaults standardUserDefaults] objectForKey:TEST_KEY]);
// 通过 setObject:forKey: 变更 TEST_KEY 值为 @"TEST_VALUE_1"
[[NSUserDefaults standardUserDefaults] setObject:@"TEST_VALUE_1" forKey:TEST_KEY];
[[NSUserDefaults standardUserDefaults] synchronize];
// 此时 TEST_KEY 值为 @"TEST_VALUE_1"
NSLog(@"Log 2 : %@",[[NSUserDefaults standardUserDefaults] objectForKey:TEST_KEY]);
// 通过 registerDefaults: 尝试变更 TEST_KEY 值为 @"TEST_VALUE_2"
NSDictionary *defaultValues1 = [NSDictionary dictionaryWithObjectsAndKeys: @"TEST_VALUE_2", TEST_KEY,nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues1];
// 此时 TEST_KEY 值仍然为 @"TEST_VALUE_1"
NSLog(@"Log 3 : %@",[[NSUserDefaults standardUserDefaults] objectForKey:TEST_KEY]);
输出内容:
2016-06-16 19:50:35.708 testregisterdefaults[34268:3677309] Log 0 : (null)
2016-06-16 19:50:35.709 testregisterdefaults[34268:3677309] Log 1 : TEST_VALUE_0
2016-06-16 19:50:35.713 testregisterdefaults[34268:3677309] Log 2 : TEST_VALUE_1
2016-06-16 19:50:35.713 testregisterdefaults[34268:3677309] Log 3 : TEST_VALUE_1
效果图
(无)
备注
(无)