2015-01-14 49 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和我都可以得到這些信息的好處。 :) –

相關問題