2016-01-06 5 views
0

Я создал две функции, называемые 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) 
+2

Не обижайтесь, но ваш код очень трудно читать. Согласно руководящим принципам именования Apple, переменные и методы должны начинаться с строчной буквы. Даже синтаксический ярлык SO запутан. – vadian

+0

Не приняты. Я хорошо знаю, что мой код трудно читать, это просто привычка. Однако я не вижу, как синтаксис highlighter запутан. @vadian – needshelp

+0

Просто шучу, я имею в виду, что такие функции, как 'encodeWithCoder' или переменные типа' example', не выделяются. – vadian

ответ

1

Значения параметра toFile в методе archiveRootObject и параметр в unarchiveObjectWithFile должна быть правильным путем файла ..

archiveRootObject возвращает true, если операция прошла успешно, в противном случае false

+0

Спасибо за это. Мне просто интересно, как работает моя игровая площадка, и почему ей не нужен путь к файлу? – needshelp