- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在 iOS 12.1 中,unarchiveObject(withFile:)
已被弃用。
如何将 NSKeyedUnarchiver.unarchiveObject(withFile: String)
转换为调用 NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data: Data)
或 NSKeyedUnarchiver.unarchivedObject(ofClasses: [AnyClass]
, from: Data), 或者 NSKeyedUnarchiver.unarchivedObject(ofClass: NSCoding.Protocol, from: Data)
?
我猜您必须使用类似let fileData = try Data(contentsOf: URL)
的方法,然后使用其中一种方法来取消归档数据。但是,我无法弄清楚,而且折旧随附的文档也没有帮助(至少对我而言)。
存档的数据相当简单——只是一个字符串数组(一个类 NameToBeSaved
的数组,如此代码定义):
class NameToBeSaved: NSObject, NSCoding {
var name: String
init(userEnteredName: String) {
self.name = userEnteredName
super.init()
}
func encode(with aCoder: NSCoder) {
aCoder.encode(name, forKey: "name")
}
required init?(coder aDecoder: NSCoder) {
name = aDecoder.decodeObject(forKey: "name") as! String
super.init()
}
这是调用 unarchiveObject(withFile:) 的代码 -
init() {
if let archivedCategoryNames = NSKeyedUnarchiver.unarchiveObject(withFile: categoryNameArchiveURL.path) as? [NameToBeSaved] {
allCategories += archivedCategoryNames
} else {
for category in starterCategories {
let thisNewCategory = NameToBeSaved(userEnteredName: category)
createNewCategory(thisNewCategory)
}
sortCategories()
}
}
最佳答案
我不知道这是否是最好的解决方案,但这为我解决了转换(旧代码被注释掉以供比较):
init() {
do {
let rawdata = try Data(contentsOf: categoryNameArchiveURL)
if let archivedCategoryNames = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(rawdata) as! [NameToBeSaved]? {
allCategories += archivedCategoryNames
}
} catch {
print("Couldn't read file")
for category in starterCategories {
let thisNewCategory = NameToBeSaved(userEnteredName: category)
createNewCategory(thisNewCategory)
}
sortCategories()
}
/* if let archivedCategoryNames = NSKeyedUnarchiver.unarchiveObject(withFile: categoryNameArchiveURL.path) as? [NameToBeSaved] {
allCategories += archivedCategoryNames
} else {
for category in starterCategories {
let thisNewCategory = NameToBeSaved(userEnteredName: category)
createNewCategory(thisNewCategory)
}
sortCategories()
}
*/
}
关于ios - 如何解决 unarchiveObject 的弃用问题(withFile :),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53097261/
我在 Haskell 中实现了 withFile: withFile' :: FilePath -> IOMode -> (Handle -> IO a) -> IO a withFile' pat
关注 haskell tutorial ,作者提供了以下实现 withFile 方法: withFile' :: FilePath -> IOMode -> (Handle -> IO a) -> I
当给定由\n 分隔的文本输入文件时,该程序会产生我期望的输出: import System.IO main :: IO () main = do h IO [String] getlines h =
在 iOS 12.1 中,unarchiveObject(withFile:) 已被弃用。 如何将 NSKeyedUnarchiver.unarchiveObject(withFile: String
我是 Laravel 新手, 如果 laravel 对输入文本进行验证 然后当验证失败时,它会返回输入的文本值 return Redirect::back()->withInput() larave
我是一名优秀的程序员,十分优秀!