'String'与'AnyObject'错误不同

时间:2015-01-14 17:17:06

标签: ios swift nsarray nsuserdefaults watchkit

我尝试通过我的应用中的NSUserDefaults将数据传递到Apple Watch应用时出现问题。每当我尝试检索存储的数组时,我都会收到错误'String' is not identical to 'AnyObject'

我一直试图找出一个解决方案,但我无法弄清楚问题是什么,因为我在我的应用程序的其他地方使用相同的方法,它没有问题。

以下是Apple Watch部分的内容:

    var defaults = NSUserDefaults(suiteName: "group.AffordIt")
    tempNames = defaults?.objectForKey("namesWatch") as NSArray
    tempDates = defaults?.objectForKey("datesWatch") as NSArray
    tempAmounts = defaults?.objectForKey("valuesWatch") as NSArray

包含应用程序部分:

    defaults?.setObject(names, forKey: "namesWatch")
    defaults?.setObject(dates, forKey: "datesWatch")
    defaults?.setObject(values, forKey: "valuesWatch")

名称,日期和值是字符串数组。

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

IMO您的问题是,您尝试投射可选值,例如

if let names = defaults.objectForKey("namesWatch") as? NSArray
{
    tempNames = names
}

可能这个问题是相关的:Swift NSUserDefaults NSArray using objectForKey

答案 1 :(得分:0)

let namesStringArray = ["John","Mary"]
let datesStringArray = ["May 21, 2009, 11:10 PM"]
let doublesStringArray = ["1.5","2.2","3.3"]

if let defaults = NSUserDefaults(suiteName: "group.AffordIt") {
    defaults.setObject(namesStringArray , forKey: "namesWatch")
    defaults.setObject(datesStringArray, forKey: "datesWatch")
    defaults.setObject(doublesStringArray, forKey: "valuesWatch")
}
let defaults = NSUserDefaults(suiteName: "group.AffordIt")
if let tempNames   = defaults!.stringArrayForKey("namesWatch") {
    println(tempNames)  // ["John", "Mary"]
}
if let tempDates   = defaults!.stringArrayForKey("datesWatch") {
    println(tempDates)  // ["May 21, 2009, 11:10 PM"]
}
if let tempAmounts = defaults!.stringArrayForKey("valuesWatch") {
    println(tempAmounts)  // ["1.5", "2.2", "3.3"]
}

答案 2 :(得分:0)

您需要将要从集合中检索的对象强制转换为字符串:

defaults?.setObject(names, forKey: "namesWatch") as? String
defaults?.setObject(dates, forKey: "datesWatch") as? String
defaults?.setObject(values, forKey: "valuesWatch") as? String