我目前被聘用來創建本地文檔iOS應用程序的數據處理部分。我沒有參與創建UserInterface,所以我需要幫助。你可以在本地保存一個ViewController數組(NSKeyedArchiver)嗎?
問題: 創建該用戶接口來實現所需的所有數據的人,只在視圖控制器被保存,並且它們使用該模型來保存視圖控制器的陣列。
我已經嘗試使用FileManager和NSKeyedArchiver將此陣列本地保存到光盤上。我也嘗試使用NSUserDefaults。他們沒有在最初的應用程序中啓用核心數據,而且該軟件包有點混亂,這沒有幫助。
下面是我在試圖保存ViewControllers的數組DocumentPageModel.swift文件寫的代碼...
static let DocumentsDirectory = try! FileManager().url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
//static let DocumentsDirectory = FileManager().urls(for: .documentDirectory, in: .userDomainMask).first!
static let ArchiveURL = DocumentsDirectory.appendingPathComponent("meals")
// Save the data onto drive (Called when the 'save' button is pressed on a create new case page
public func saveData() {
NSKeyedArchiver.archiveRootObject(CasePageModel.cases, toFile: CasePageModel.ArchiveURL.path)
//listOfTasks = CasePageModel.cases
print("Successfully saved")
}
private var listOfTasks: [CaseViewController] {
get {
return (NSKeyedUnarchiver.unarchiveObject(withFile: CasePageModel.ArchiveURL.path) as? [CaseViewController])! // ??[]
}
set {
NSKeyedArchiver.archiveRootObject(CasePageModel.cases, toFile: CasePageModel.ArchiveURL.path)
}
}
// Retrieves data saved and makes it: var cases
// Called when view is loaded.
public func retrieveData() {
CasePageModel.cases = listOfTasks
print("Successfully loaded")
print("\(CasePageModel.cases.count)")
/*
if let arrayOfCases: NSArray = UserDefaults.object.(forKey: "cases") as! NSArray {
CasePageModel.cases = arrayOfCases
}
*/
}
這罰款救援數組,但調用retrieveData時,變量/數據據推測,保存在ViewController中是'nil'拋出未捕獲的異常。
問: 有任何實際的方式來保存的viewController 和它的狀態在陣列中,並保存在本地是陣列? 我可能實現了'模型'的正確版本,但由於之前的開發人員開發了10多個視圖控制器和一個模型,我相信很難爲它們創建單獨的模型,看起來好像圖像,錄音和外部筆記輸入...所以如果有人知道任何可能保存ViewController本地變量的方式,請幫助我!提前
謝謝,我一直在使用NSCoding努力試圖挽救這幾個小時..
不認爲試圖拯救整個的viewController磁盤是個好主意,而只是保存其數據在磁盤並在以後恢復,或用[保存視圖 - 控制(https://開頭開發商。 apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/PreservingandRestoringState.html)如果你想退出並繼續發佈 – Tj3n
@ Tj3n我明白,保存整個viewController不是最好的主意。但由於之前的開發人員並未創建多個模型來跟蹤並保持應用程序的輸入信息(名稱,日期,圖像,外部註釋)..而且,他們創建的唯一模型文件是一個將所有viewcontrollers(及其變量)保存在一個數組中的文件。所以我不想幹涉他們創建的任何功能,因爲我無法理解他們的代碼。 –
好吧,這是嚴重的代碼味道,我認爲你的保存不起作用,因爲視圖控制器不面對'NSCoding',如果你實現這個,你將能夠將它保存在'NSUserDefault'或作爲文件 – Tj3n