我在运行时向NSUserDefaults
添加值并将密钥设为[NSString stringWithFormat:@"decrement%@",course_id];
我一个接一个地设置对象有什么方法可以获得所有的userdefaults对象,其键以“减量”开头?
或者我必须循环并通过逐个制作精确的密钥来获取对象?
注意: - 我接受投票作为一种健康的批评方式,但确实写下了原因,以便我可以改进。
答案 0 :(得分:4)
你可以像这样获得NSUserDefaults的所有字典键:
NSArray *arrKeys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]
现在使用NSPredicate查找[NSString stringWithFormat:@“减量%@”,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];
答案 1 :(得分:2)
NSArray *keys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys];
然后,您可以使用keys
方法过滤NSArray
。
但听起来你应该使用不同的持久性机制,例如Coredata。
答案 2 :(得分:2)
不是最佳/紧固解决方案,但使用可用的内置块,您可以通过这种方式枚举所有条目:
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];
}];
答案 3 :(得分:-1)
答案是“不”,这是无法做到的。用户默认值非常类似于具有键值对的字典。也就是说,您可以创建一个包含1000个数字的数组,从默认值中获取该数组,然后向其询问900值。