【问题标题】:Attempt to set a non-property-list object - NSUserDefaults尝试设置非属性列表对象 - NSUserDefaults
【发布时间】:2016-10-31 18:01:36
【问题描述】:

当我尝试将Dictionary 保存到NSUserDefaults 时,找不到错误的原因。

有一个非常简单的类函数:

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

它会创建一些记录用户数据的记录。不幸的是 .UserData 键有问题。过去几行代码我试图将 userData 对象保存在该键处。但是在错误之后我添加了新的临时对象。在我尝试保存一些新数据后,我得到了这个错误:

    2016-10-31 18:45:04.564 ios_app[11679:194224] Attempt to set a non-property-list object {
    account = 1;
    email = "te@st.com";
    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 = "te@st.com";
    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

我会很高兴得到帮助:)

【问题讨论】:

标签: ios swift nsdictionary nsuserdefaults


【解决方案1】:

你不能在里面有 null。

属性列表不支持显式空值

Wikipedia

【讨论】:

猜你喜欢
  • 2013-11-12
  • 1970-01-01
  • 2014-06-04
  • 2019-06-19
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多