2010-08-09 1 views
7

Есть ли способ для меня «пройти» по списку всех NSUserDefault s в моем приложении iPhone и удалить только некоторые из них?Удалить все мои NSUserDefaults, которые начинаются с определенного слова

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

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

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

ответ

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]; 
0

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

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

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