Что может привести к очистке NSUserDefaults

Я получаю несколько нечетных отчетов для своего приложения, где параметры приложения, хранящиеся в NSUserDefaults , очищаются. Все отчеты были на iOS 7s

Я знаю, что вы можете вручную очистить NSUserDefaults , удалив или сделав звонок

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

Но есть ли другие известные причины для приложения, чтобы очистить его настройки?

Если вы не хотите, чтобы ваши данные были удалены, вы должны использовать KeyChain для хранения значений. Хороший способ начать работу: использование KeyChain

Ниже я предоставляю пример кода, как хранить и получать данные из KeyChain

Импорт необходимых фреймворков

#import <Security/Security.h>

Сохранение значений в KeyChain

 NSString *key = @"Full Name"; NSString *value = @"Steve Jobs"; NSData *valueData = [value dataUsingEncoding:NSUTF8StringEncoding]; NSString *service = [[NSBundle mainBundle] bundleIdentifier]; NSDictionary *secItem = @{ (__bridge id)kSecClass : (__bridge id)kSecClassGenericPassword, (__bridge id)kSecAttrService : service, (__bridge id)kSecAttrAccount : key, (__bridge id)kSecValueData : valueData, }; CFTypeRef result = NULL; OSStatus status = SecItemAdd((__bridge CFDictionaryRef)secItem, &result); if (status == errSecSuccess) { NSLog(@"Successfully stored the value"); } else{ NSLog(@"Failed to store the value with code: %ld", (long)status); } 

Получение ценностей от KeyChain

 NSString *keyToSearchFor = @"Full Name"; NSString *service = [[NSBundle mainBundle] bundleIdentifier]; NSDictionary *query = @{ (__bridge id)kSecClass : (__bridge id)kSecClassGenericPassword, (__bridge id)kSecAttrService : service,(__bridge id)kSecAttrAccount : keyToSearchFor, (__bridge id)kSecReturnAttributes : (__bridge id)kCFBooleanTrue, }; CFDictionaryRef valueAttributes = NULL; OSStatus results = SecItemCopyMatching((__bridge CFDictionaryRef)query, (CFTypeRef *)&valueAttributes); NSDictionary *attributes = (__bridge_transfer NSDictionary *)valueAttributes; if (results == errSecSuccess){ NSString *key, *accessGroup, *creationDate, *modifiedDate, *service; key = attributes[(__bridge id)kSecAttrAccount]; accessGroup = attributes[(__bridge id)kSecAttrAccessGroup]; creationDate = attributes[(__bridge id)kSecAttrCreationDate]; modifiedDate = attributes[(__bridge id)kSecAttrModificationDate]; service = attributes[(__bridge id)kSecAttrService]; NSLog(@"Key = %@\n \ Access Group = %@\n \ Creation Date = %@\n \ Modification Date = %@\n \ Service = %@", key, accessGroup, creationDate, modifiedDate, service); } else { NSLog(@"Error happened with code: %ld", (long)results); } 
  • Настройки Bundle - присвоение элемента слайдера заголовку
  • iOS NSUserDefaults Наблюдение за изменением значений для одного ключа
  • Почему я не могу сохранить WKWebView в ?
  • Сохраняйте флажки аксессуаров на uitableview, когда пользователи загружают просмотр несколько раз
  • Можно ли использовать NSUserDefaults вместо базы данных?
  • Работа с NSUserDefault при сохранении собственного типа данных
  • iOS UILocalNotification срабатывает один раз в день, раз в два дня и только по воскресеньям
  • Как сохранить данные для двух текстовых полей с помощью NSUserDefaults?
  • Обнаружение первой установки времени в iOS NOT NSUserDefaults
  • NSUserDefaults setValue и objectForKey
  • Чтение NSUserDefaults в watchOS 2 (я знаю, что группы приложений не работают)
  • Давайте будем гением компьютера.