我创建了两个名为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)
答案 0 :(得分:1)
方法toFile
中参数archiveRootObject
的值和unarchiveObjectWithFile
中的参数必须是有效的文件路径..
archiveRootObject
会返回true
,否则false