gpt4 book ai didi

ios - 你能在本地快速保存一组 ViewControllers (NSKeyedArchiver) 吗?

转载 作者:行者123 更新时间:2023-11-28 08:12:07 25 4
gpt4 key购买 nike

我目前受雇创建本地文档 iOS 应用程序的数据处理部分。我没有参与创建用户界面,所以我需要帮助。

问题:创建用户界面的人实现了所有需要保存在 View Controller 中的数据,他们使用模型来保存一组 View Controller 。

我已经尝试使用 FileManager 和 NSKeyedArchiver 将这个数组本地保存到光盘上。我也尝试过使用 NSUserDefaults。他们也没有在初始应用程序中启用核心数据,而且包有点乱,这无济于事。

下面是我在 DocumentPageModel.swift 文件中编写的代码,它试图保存一个 ViewController 数组...

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 and 它在数组中的状态并在本地保存 that 数组?我可能会实现“模型”的正确版本,但因为之前的开发人员开发了 10 多个 View Controller 和一个模型,我相信很难为所有这些创建单独的模型,就像图像、录音和外部一样输入注释...所以如果有人知道任何方法可以在本地保存 ViewController 及其变量,请帮助我!

提前致谢,我已经努力保存了几个小时..

最佳答案

您可以使用 NSCoding 将任何模型类对象存储在 NSUserDefaults 中。

例子:

import UIKit

类类名:NSObject {

var  customerID:Int!

override init() {}


required init(coder aDecoder: NSCoder) {

if let customerID = aDecoder.decodeObjectForKey("customerID") as? Int {
self.customerID = totalHoldingCost
}


}

func encodeWithCoder(aCoder: NSCoder) {

aCoder.encodeObject(customerID, forKey: "customerID")
}

关于ios - 你能在本地快速保存一组 ViewControllers (NSKeyedArchiver) 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43444270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com