2016-10-31 4 views
3

Ich konnte keinen Grund finden, wie ich einen Fehler habe, wenn ich versuche, speichern Sie Dictionary in der NSUserDefaults.Versuch, ein Nicht-Eigenschaft-Liste-Objekt zu setzen - NSUserDefaults

Es ist eine wirklich einfache Klasse Funktion:

class func userLoggedIn(udid udid: String, username: String, email: String, userData: [String: AnyObject]) { 
    let userDataDictionary: NSDictionary = NSDictionary(dictionary: userData) 

    NSUserDefaults.standardUserDefaults().setObject(udid, forKey: UserDefaultsKeyType.UserUDID.rawValue) 
    NSUserDefaults.standardUserDefaults().setObject(username, forKey: UserDefaultsKeyType.Username.rawValue) 
    NSUserDefaults.standardUserDefaults().setObject(email, forKey: UserDefaultsKeyType.Email.rawValue) 
    NSUserDefaults.standardUserDefaults().setObject(userDataDictionary, forKey: UserDefaultsKeyType.UserData.rawValue) 

    NSUserDefaults.standardUserDefaults().synchronize() 
} 

Es schafft einige Datensätze, die die angemeldeten Benutzerdaten. Leider hat der .UserData-Schlüssel ein Problem. Wenige Zeilen Code in der Vergangenheit Ich habe versucht, Benutzerdata-Objekt bei diesem Schlüssel zu speichern. Aber nach dem Fehler habe ich ein neues temporäres Objekt hinzugefügt. Nachdem ich versucht habe, einige neue Daten zu speichern, habe ich diesen Fehler habe:

2016-10-31 18:45:04.564 ios_app[11679:194224] Attempt to set a non-property-list object { 
    account = 1; 
    email = "[email protected]"; 
    emailVerified = 0; 
    firstName = test; 
    values = 0; 
    gender = "<null>"; 
    description = string; 
    name = test; 
    permissions =  (
     "test_user_role" 
    ); 
} as an NSUserDefaults/CFPreferences value for key userData 
2016-10-31 18:45:04.572 ios_app[11679:194224] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to insert non-property list object { 
    account = 1; 
    email = "[email protected]"; 
    emailVerified = 0; 
    firstName = test; 
    values = 0; 
    gender = "<null>"; 
    description = string; 
    name = test; 
    permissions =  (
     "test_user_role" 
    ); 
} for key userData' 
*** First throw call stack: 
(
    0 CoreFoundation      0x000000010bfded85 __exceptionPreprocess + 165 
    1 libobjc.A.dylib      0x000000010ba52deb objc_exception_throw + 48 
    2 CoreFoundation      0x000000010bfdecbd +[NSException raise:format:] + 205 
    3 CoreFoundation      0x000000010bf99dee _CFPrefsValidateValueForKey + 142 
    4 CoreFoundation      0x000000010bfe1ed9 -[CFPrefsPlistSource sendMessageSettingValue:forKey:] + 217 
    5 CoreFoundation      0x000000010bfe0a1d -[CFPrefsPlistSource alreadylocked_setValues:forKeys:count:] + 509 
    6 CoreFoundation      0x000000010bf99f15 -[CFPrefsSource setValues:forKeys:count:removeValuesForKeys:count:] + 261 
    7 CoreFoundation      0x000000010bed6950 -[CFPrefsSource setValues:forKeys:count:] + 32 
    8 CoreFoundation      0x000000010bfd8a6a -[CFPrefsSearchListSource alreadylocked_setValues:forKeys:count:] + 362 
    9 CoreFoundation      0x000000010bf99f15 -[CFPrefsSource setValues:forKeys:count:removeValuesForKeys:count:] + 261 
    10 CoreFoundation      0x000000010bed6950 -[CFPrefsSource setValues:forKeys:count:] + 32 
    11 CoreFoundation      0x000000010bf0fd0a -[CFPrefsSource setValue:forKey:] + 58 
    12 CoreFoundation      0x000000010bfd69f1 __95+[CFPrefsSearchListSource withSearchListForIdentifier:container:cloudConfigurationURL:perform:]_block_invoke + 385 
    13 CoreFoundation      0x000000010bfd67f6 normalizeQuintuplet + 518 
    14 CoreFoundation      0x000000010bfd65e4 +[CFPrefsSearchListSource withSearchListForIdentifier:container:cloudConfigurationURL:perform:] + 100 
    15 CoreFoundation      0x000000010bfc4169 _CFPreferencesSetAppValueWithContainer + 153 
    16 Foundation       0x000000010b6062fe - [NSUserDefaults(NSUserDefaults) setObject:forKey:] + 55 

[...] 

    30 UIKit        0x0000000109aa9f09 UIApplicationMain + 171 
      31 ios_app      0x00000001085619c2 main + 114 
      32 libdyld.dylib      0x000000010cdb792d start + 1 
      33 ???         0x0000000000000001 0x0 + 1 
     ) 
     libc++abi.dylib: terminating with uncaught exception of type NSException 

ich Hilfe froh sein :)

+0

Bitte 'NSLog ("% @", userDataDictionary)' – matt

+1

Mögliches Duplikat [Versuch, ein nicht-Eigenschaft-Liste Objekt als NSUserDefaults einstellen] (http://stackoverflow.com/questions/19720611/ set-a-non-property-list-objekt-als-nsuserdefaults – iphonic

Antwort

13

Sie nicht null da drin haben.

property lists do not support explicit nulls

Wikipedia

+0

das ist richtig, haben sie eine lösung dieses NSNull-objekt zu lösen? Bitte teilen Sie Ihren Gedanken:/ – Eddie

+0

@Eddie Ich verstehe Ihre Frage nicht. Ein Objekt löst man nicht "auf". – Andreas

+0

nvm, ich fand die Lösung von http://stackoverflow.com/questions/26259326/storing-nsnull-null-values-in-nsuserdefaults-from-json-serialization- causes – Eddie

Verwandte Themen