2014-04-18 9 views
7

Ich habe einige seltsame Berichte für meine App bekommen, wo die in der NSUserDefaults gespeicherten Anwendungseinstellungen gelöscht werden. Die Berichte haben alle 7s auf iOS gewesenWas kann dazu führen, NSUserDefaults gelöscht werden

Ich weiß, dass Sie manuell die NSUserDefaults entweder durch Deinstallation oder einen Anruf zu

NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier]; 

[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain]; 

Aber gibt es andere bekannte Ursachen für eine App seine Einstellungen löschen löschen kann?

+1

Auf meinem jailbroken iPhone verlieren viele Anwendungen ihre NSUserdefaults nach einem Systemabsturz. Hast du überprüft, ob es nicht von jailbroken iPhones ist? – Selvin

+0

Nicht, dass ich weiß, obwohl die meisten dieser Berichte Entwicklungs-Builds hatten, was bedeutet, dass sie manuell außerhalb des App Store installiert wurden. Ich muss nachsehen, ob sie alle waren. – loadedion

+0

Sind sie sicher, dass sie überhaupt geschrieben werden? –

Antwort

1

Wenn Sie Ihre Daten nicht löschen möchten, sollten Sie KeyChain zum Speichern von Werten verwenden. Ein guter Weg, um loszulegen: Using KeyChain

Im Folgenden werde ich ein Beispiel-Code bin Bereitstellung, wie und Daten zu speichern, aus dem KeyChain zurück

Importieren erforderlichen Gerüste

#import <Security/Security.h>

Werte speichern

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); 
} 

Werte von KeyChain zurückholen

+1

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. – LittleBobbyTables

+0

Guter Punkt @LittleBobbyTables, ich werde ein Beispiel thnx schreiben! :) – EridB

Verwandte Themen