变更记录
方案名称
语法 - 通过 registerDefaults 实现单次记录需求
关键字
语法 \ NSUserDefaults \ registerDefaults \ 单次记录
需求场景
- 需要实现单次记录的需求场景,避免重复赋值与重复记录
参考链接
- CSDN - iOS: NSUserDefaults issues
详细内容
registerDefaults 方法调用时会先检查 NSUserDefaults 中是否已经存在相同的 Key ,如果存在则不会把其覆盖。
该特性可以很好的用于记录单次运行的需求,当某 Key 已经被赋值后,避免重复赋值和多次赋值。
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| // [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]);
|
输出内容:
1 2 3 4
| 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
|
效果图
(无)
备注
(无)