我尝试通过我的应用中的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")
名称,日期和值是字符串数组。
有什么想法吗?
答案 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