3

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

我正在一一设置对象有什么方法可以获取所有以“递减”开头的 userdefaults 对象?

或者我必须进入一个循环并通过一个一个精确的键来获取对象?

注意:- 我接受反对票作为一种健康的批评方式,但请写下原因以便我改进。

4

4 回答 4

4

您可以像这样获取 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];
于 2012-09-12T11:16:52.773 回答
2

NSArray *keys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys];

keys然后,您可以使用NSArrays 方法进行过滤。

但听起来您应该使用不同的持久性机制,例如 Coredata。

于 2012-09-12T11:14:30.533 回答
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];
}];
于 2012-09-12T11:20:15.030 回答
-1

答案是“不”,这是没有办法的。用户默认值非常像具有键值对的字典。也就是说,您可以创建一个包含 1000 个数字的数组,从默认值中获取该数组,然后向它询问 900 的值。

于 2012-09-12T11:15:44.707 回答