Удалите все мои NSUserDefaults, которые начинаются с определенного слова

Есть ли способ "пройти" через список всех NSUserDefault в моем приложении iPhone и удалить только некоторые из них?

Например, я хотел бы получить все имена ключей, начинающиеся с определенного слова.

Что-то вроде этого:

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

Ответ 1

Вы можете просмотреть 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];

Ответ 2

i Полученное решение для этого просто используйте его, где вы хотите удалить все сеансы

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

он будет работать