检索数组函数不起作用

时间:2016-01-06 07:20:34

标签: arrays swift nscoding

我创建了两个名为save array和retrieve array的函数,他们的工作是从手机中保存和检索一个数组。我的问题是他们没有工作。这是两个功能。

func SaveArray (array: [IOU],fileID: String){
NSKeyedArchiver.archiveRootObject(array, toFile: fileID)
}
func RetrieveArray (fileID: String, var array: [IOU]) -> [IOU]{
    if let arraytoRetrieve = NSKeyedUnarchiver.unarchiveObjectWithFile(fileID) as? [IOU]{
        array = arraytoRetrieve
    }
    return array
}

IOU是我定义的类:

class IOU : NSObject, NSCoding {

var Amount : Double
var Payer : String
var Description : String



init (amount: Double, payer: String, description: String){
    self.Amount = amount
    self.Payer = payer
    self.Description = description

    super.init()

}

required convenience init(coder decoder: NSCoder){
    let amount = decoder.decodeDoubleForKey("amount")
    let payer = decoder.decodeObjectForKey("payer") as! String
    let description = decoder.decodeObjectForKey("description") as! String
    self.init(amount: amount,payer: payer,description: description)
}
func encodeWithCoder(aCoder: NSCoder) {
    aCoder.encodeDouble(self.Amount, forKey: "amount")
    aCoder.encodeObject(self.Payer, forKey: "payer")
    aCoder.encodeObject(self.Description, forKey: "description")
}


}

我在viewWillAppear方法中实现了我的检索功能,如下所示:

Debts = RetrieveArray("Debts", array: Debts)

但由于某些未知原因,当我像下面那样进行游乐场测试时,它的工作正常:

var IOUArray : [IOU] = [IOU]()


var example = IOU(amount: 70, payer: "Jackson", description: "Because")
IOUArray.append(example)


func SaveArray (array: [IOU],fileID: String){
    NSKeyedArchiver.archiveRootObject(array, toFile: fileID)
}
func RetrieveArray (fileID: String) -> [IOU]{
    let IOUA = NSKeyedUnarchiver.unarchiveObjectWithFile(fileID) as! [IOU]
    return IOUA
}

SaveArray(IOUArray, fileID: "IOUArray")
RetrieveArray("IOUArray")
print(RetrieveArray("IOUArray")[0].Amount)

1 个答案:

答案 0 :(得分:1)

方法toFile中参数archiveRootObject的值和unarchiveObjectWithFile中的参数必须是有效的文件路径..

如果操作成功,

archiveRootObject会返回true,否则false