2016-01-26 28 views
1

我有兩個數組斯威夫特數組轉換爲NSData的導致錯誤

var questions: [Question]! 
var types: [[Type]]! 

我想這兩個數組轉換爲NSData的。我喜歡下面

let typesData = NSKeyedArchiver.archivedDataWithRootObject(types) 
let questionsData = NSKeyedArchiver.archivedDataWithRootObject(questions) 

只要它擊中typesData,應用程序崩潰,並拋出一個錯誤,如下列:

*** NSForwarding: warning: object 0x15e5a4100 of class '(app Name).Type' does not implement methodSignatureForSelector: -- trouble ahead Unrecognized selector -[(app Name).Type replacementObjectForKeyedArchiver:] 

我假設它導致一個錯誤,因爲這些陣列具有自定義類型。有沒有什麼辦法可以這些陣列轉換爲NSData的?解決這個問題的任何解決方案,將不勝感激。

+0

做題和類型實現initWithCoder:? – Larme

+0

似乎像你需要實現NSCoding他們那麼只有美國可以將其保存爲NSData的 – Tj3n

+0

@Larme,他們沒有的initWithCoder功能。我需要執行它嗎? – Kahsn

回答

1

的SWIFT,您需要實現這在你的對象(問題,類型)類,像這樣:

class ItemObject:NSObject, NSCoding { 
    var itemName = "" 
    var itemCheck = false 

    func encodeWithCoder(aCoder: NSCoder) { 
     aCoder.encodeObject(itemName, forKey:"itemName") 
     aCoder.encodeBool(itemCheck, forKey:"itemCheck") 
    } 


    required init (coder aDecoder: NSCoder) { 
     self.itemName = aDecoder.decodeObjectForKey("itemName") as! String 
     self.itemCheck = aDecoder.decodeBoolForKey("itemCheck") 
    } 

    override init() { 
     super.init() 
    } 
} 

這也需要存儲自定義對象NSUserDefaultsCoreData