【问题标题】:App crash using iCloud Key-Value storage writing使用 iCloud 键值存储写入的应用程序崩溃
【发布时间】:2016-01-16 00:48:06
【问题描述】:

每次我尝试使用 iCloud 键值存储为键设置值时,我的应用程序都会崩溃...

我收到此错误:

Terminating app due to uncaught exception 'NSUnknownKeyException', reason:     '[<NSUbiquitousKeyValueStore 0x13fd5b8a0> setValue:forUndefinedKey:]: this class     is not key value coding-compliant for the key ladies.'
*** First throw call stack:
(0x1842f0f48 0x19979bf80 0x1842f0c08 0x18516c014 0x1000e5380 0x1000e9914     0x1000f0430 0x1000f046c 0x1000f04a0 0x1000f04e4 0x1898bf240 0x1898bed3c     0x1898bebc4 0x189085c2c 0x101429c68 0x10142f710 0x1842a81f8 0x1842a6060 0x1841d4ca0 0x18f758088 0x1898ecffc 0x1000f4564 0x199fde8b8)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

我定义了我的密钥库:

var iCloudStore = NSUbiquitousKeyValueStore.defaultStore()

这样设置我的值:

iCloudStore.setValue(experience, forKey: "experience")

为什么这不起作用?我是否必须定义该密钥才能使其工作?我真的不明白我得到的错误......

【问题讨论】:

    标签: ios swift icloud


    【解决方案1】:

    setValue:forKey: 不是 NSUbiquitousKeyValueStore.defaultStore() 上用于将数据保存到 iCloud 键值存储的方法。相反,它是来自NSKeyValueCoding 协议的方法,用于更一般的键值编码,类型为NSValueNSNumber。您收到的错误是指您尝试访问 iCloudStore 对象本身而不是 iCloud 键值存储中的“体验”键。

    NSUbiquitousKeyValueStore.defaultStore() 上可用的保存键值对的方法有:

    • setArray:forKey:
    • setBool:forKey:
    • setData:forKey:
    • setDictionary:forKey:
    • setDouble:forKey:
    • setLongLong:forKey:
    • setObject:forKey:
    • setString:forKey:

    选择最适合您的类型的方法。

    【讨论】:

    • 那么 NSUserdefauls.setValue 的 iCloud 等价物是 setObject?
    • 选择最适合您类型的方法。 setObject:forKey: 可能是所有方法中最通用的,并且可能会起作用,但如果可能,最好是具体的。
    • 在某些情况下,例如NSUserDefaults,当您调用setValue:forKey: 时,您将获得与setObject:forKey: 相同的行为。要回答您最初的问题,是的,setObject:forKey:,对于 iCloud,代表 setValue:forKey:NSUserDefaults 上为您所做的事情。
    猜你喜欢
    • 2011-12-19
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    相关资源
    最近更新 更多