gpt4 book ai didi

swift - 取消归档无效文件时如何使 initWithCoder() 变得可失败?

转载 作者:可可西里 更新时间:2023-11-01 01:42:17 26 4
gpt4 key购买 nike

假设我从 NSKeyedArchiver 创建了一个文件,并且该文件被第三方修改/替换。因此,当我尝试取消存档文件时。应该是对象初始化失败。

但是 initWithCoder() 不是一个可失败的初始化器。所以当数据无效时我不能返回 nil。但同时。 NSKeyedUnarchiver 在取消归档对象时可以返回 nil 值。所以我真的很困惑如何在 initWithCoder() 中返回一个 nil 对象。

谢谢。

最佳答案

您可以从 awakeAfterUsingCoder(_:)

返回 nil

来自 the document :

You must return self from initWithCoder:. If you have an advanced need that requires substituting a different object after decoding, you can do so in awakeAfterUsingCoder:.

class Foo: NSObject, NSCoding {
override init() {}
required init(coder aDecoder: NSCoder) {
}
func encodeWithCoder(aCoder: NSCoder) {
}
override func awakeAfterUsingCoder(aCoder: NSCoder) -> AnyObject? {
return nil
}
}

let data = NSKeyedArchiver.archivedDataWithRootObject(Foo())
let obj: AnyObject? = NSKeyedUnarchiver.unarchiveObjectWithData(data) // -> nil

关于swift - 取消归档无效文件时如何使 initWithCoder() 变得可失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28641810/

26 4 0
文章推荐: ios - 获得内存不足崩溃的通知
文章推荐: javascript - CKEditor 中断
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com