2015-01-14 47 views
0

我在通过我的应用程序中的NSUserDefaults将数据传递给Apple Watch应用程序时遇到问题。每当我尝试检索存储的数组时,出现错误'String' is not identical to 'AnyObject''字符串'与'AnyObject'错误不相同

我一直想弄清楚一个解决方案,但我无法弄清楚是什么问题,因为我在我的应用程序中的其他地方使用了相同的方法,并且没有问题。

以下是我在苹果手表部件:

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

当发生这种情况对我来说,它是因为我使用不当?当我的意思是连锁可选! - 我不在我的Mac前面,但我会尝试 – tng

+0

您确定在执行过程中的某个时刻您没有意外设置字符串而不是数组? –

回答

0

IMO你的问题是,你试图施放一个可选值,例如

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

大概这个SO问题是相关的:Swift NSUserDefaults NSArray using objectForKey

+0

不,因为'NSArray'解开可选。 – matt

+0

是的。对不起,被OPs投给'NSArray'而没有提供信息而困惑,他想要写'[String]',尽管这应该已经清楚了...... –

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"] 
} 
0

您需要转换您从集合检索对象为字符串:

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

接受反对投票没有问题,但如果有在这个答案中的错误请指出,所以OP和我都可以得到这些信息的好处。 :) –

相关问题