请帮帮我!我陷入了一个循环,找不到出路。我正在尝试为工作学习 IOS 编程,所以我想我会从他们的教程应用程序 Meal list 应用程序开始。我在你应该开始保存持久数据的部分,现在编辑器让我陷入了一个永无止境的循环。我有一行代码...
let isSuccessfulSave = NSKeyedArchiver.archiveRootObject(meals, toFile: Meal.ArchiveURL.path)
这给了我一个警告说...
'archiveRootObject(_:toFile:)' was deprecated in iOS 12.0: Use +archivedDataWithRootObject:requiringSecureCoding:error: instead
好的,所以我将代码行更改为...
let isSuccessfulSave = NSKeyedArchiver.archivedDataWithRootObject(meals)
然后给了我警告...
'archivedDataWithRootObject' has been renamed to 'archivedData(withRootObject:)'
好的,所以我将代码行更改为...
let isSuccessfulSave = NSKeyedArchiver.archivedData(withRootObject: meals)
这告诉我...
'archivedData(withRootObject:)' was deprecated in iOS 12.0: Use +archivedDataWithRootObject:requiringSecureCoding:error: instead
好的... 所以... archivedData 已被弃用,我必须使用 archivedDataWithRootObject,但使用 archivedDataWithRootObject 已重命名为 archivedData,但 archivedData 已被弃用,因此请使用 archivedDataWithRootObject,它被重命名为 archivedData,它已被弃用...无穷无尽.
我曾尝试查看开发人员文档,但他们只是告诉我同样的事情,其中一个已被弃用,没有任何链接或任何内容,搜索 google 只给我一堆页面,向我展示了使用其中任何一个的语法。我仍然是 IOS 编程的新手,不知道如何摆脱 deprecated to renamed to deprecated to ... 的无休止循环。
请帮忙,我迷路了,不知道如何继续。谢谢。
最佳答案
我正在关注 the same example you are trying to do ,并且我想出了如何更新在 iOS 12 中存储和检索值的方法,这应该对您有所帮助:
//MARK: Private Methods
private func saveMeals() {
let fullPath = getDocumentsDirectory().appendingPathComponent("meals")
do {
let data = try NSKeyedArchiver.archivedData(withRootObject: meals, requiringSecureCoding: false)
try data.write(to: fullPath)
os_log("Meals successfully saved.", log: OSLog.default, type: .debug)
} catch {
os_log("Failed to save meals...", log: OSLog.default, type: .error)
}
}
func getDocumentsDirectory() -> URL {
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
return paths[0]
}
private func loadMeals() -> [Meal]? {
let fullPath = getDocumentsDirectory().appendingPathComponent("meals")
if let nsData = NSData(contentsOf: fullPath) {
do {
let data = Data(referencing:nsData)
if let loadedMeals = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as? Array<Meal> {
return loadedMeals
}
} catch {
print("Couldn't read file.")
return nil
}
}
return nil
}
同时你会发现你需要像这样更新 ViewDidLoad:
override func viewDidLoad() {
super.viewDidLoad()
// Use the edit button item provided by the table view controller.
navigationItem.leftBarButtonItem = editButtonItem
let savedMeals = loadMeals()
if savedMeals?.count ?? 0 > 0 {
meals = savedMeals ?? [Meal]()
} else {
loadSampleMeals()
}
}
我希望这对我有帮助,对我来说,该应用程序现在正在运行,可以存储和检索数据。
仅供引用:这不适用于 Xcode 11 beta,而 iOS 13 应该适用于这些版本之前的任何版本。
关于IOS 编辑器错误。 archivedData 重命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53347426/