我NSUserDefaults
在运行时添加值并将键设置为[NSString stringWithFormat:@"decrement%@",course_id];
我正在一一设置对象有什么方法可以获取所有以“递减”开头的 userdefaults 对象?
或者我必须进入一个循环并通过一个一个精确的键来获取对象?
注意:- 我接受反对票作为一种健康的批评方式,但请写下原因以便我改进。
您可以像这样获取 NSUserDefaults 的所有字典键:
NSArray *arrKeys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]
现在使用 NSPredicate 查找 [NSString stringWithFormat:@"decrement%@",course_id]; arrKeys 中的值
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SELF like %@)",@"decrement"];
NSArray *keysLikeDecrement =
[arrKeys filteredArrayUsingPredicate:predicate];
NSPredicate *aPredicate =
[NSPredicate predicateWithFormat:@"SELF beginswith 'decrement'"];
NSArray *beginWithDecrement =
[arrKeys filteredArrayUsingPredicate:aPredicate];
NSPredicate *bPredicate =
[NSPredicate predicateWithFormat:@"SELF contains 'decrement'"];
NSArray *containsWithDecrement =[arrKeys filterUsingPredicate:bPredicate];
NSArray *keys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys];
keys
然后,您可以使用NSArray
s 方法进行过滤。
但听起来您应该使用不同的持久性机制,例如 Coredata。
不是最好/最快的解决方案,但使用可用的内置块,您可以通过这种方式枚举所有条目:
NSArray *keys = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys];
[[keys objectsAtIndexes:[keys indexesOfObjectsPassingTest:^BOOL(NSString *key, NSUInteger idx, BOOL *stop) {
return [obj hasPrefix:@"myPrefix"];
}]] enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop) {
[[NSUserDefaults standardUserDefaults] objectForKey:key];
}];
答案是“不”,这是没有办法的。用户默认值非常像具有键值对的字典。也就是说,您可以创建一个包含 1000 个数字的数组,从默认值中获取该数组,然后向它询问 900 的值。