删除所有以某个单词开头的NSUserDefaults

时间:2010-08-09 01:15:55

标签: iphone ios objective-c xcode nsuserdefaults

有没有办法让我“遍历”我的iPhone应用中的所有NSUserDefault列表,只删除某些?

例如,我想获得所有以某个单词开头的关键名称。

这样的事情:

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"Dog*"];

2 个答案:

答案 0 :(得分:18)

您可以查看dictionaryRepresentation

这是一个使用NSPredicate作为通用匹配器以实现更大灵活性的实现。

@interface NSUserDefaults (JRAdditions)
- (void)removeObjectsWithKeysMatchingPredicate:(NSPredicate *)predicate;
@end

@implementation NSUserDefaults (JRAdditions)

- (void)removeObjectsWithKeysMatchingPredicate:(NSPredicate *)predicate {
   NSArray *keys = [[self dictionaryRepresentation] allKeys];
   for(NSString *key in keys) {
      if([predicate evaluateWithObject:key]) {
         [self removeObjectForKey:key];
      }
   }
}

@end

用法:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH %@", @"something"];
[[NSUserDefaults standardUserDefaults] removeObjectsWithKeysMatchingPredicate:pred];

答案 1 :(得分:0)

我有解决方案,只需在你要删除所有会话的地方使用它

 NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];

它会起作用