有没有办法使用正则表达式或外卡来从NSUserDefaults获取对象

时间:2012-09-12 11:08:35

标签: ios xcode

我在运行时向NSUserDefaults添加值并将密钥设为[NSString stringWithFormat:@"decrement%@",course_id];

我一个接一个地设置对象有什么方法可以获得所有的userdefaults对象,其键以“减量”开头?

或者我必须循环并通过逐个制作精确的密钥来获取对象?

注意: - 我接受投票作为一种健康的批评方式,但确实写下了原因,以便我可以改进。

4 个答案:

答案 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值。