【发布时间】:2016-10-06 08:28:55
【问题描述】:
我正在尝试使用 Swift 从 Xcode 8.0 中的持久存储中存储和加载对象。
我遵循了 Apple 的 Start Developing iOS Apps (Swift): Jump Right In 教程,并且在星级评分的整数值方面遇到了同样的问题。
这是我的课程“费用”的“裁剪”版本,用于显示我遇到问题的“金额”变量:
class Expense: NSObject, NSCoding {
var amount: Double
static let DocumentsDirectory = FileManager().urls(for: .documentDirectory, in: .userDomainMask).first!
static let ArchiveURL = DocumentsDirectory.appendingPathComponent("expenses")
struct PropertyKey {
static let amountKey = "amount"
}
func encode(with aCoder: NSCoder) {
aCoder.encode(amount, forKey:PropertyKey.amountKey)
}
required convenience init?(coder aDecoder: NSCoder) {
let amount = aDecoder.decodeObject(forKey: PropertyKey.amountKey) as! Double
self.init(date: date, amount: amount, description: description, image: image)
}
}
当我运行模拟器并尝试加载“数量”时,我得到以下异常:“致命错误:在展开可选值时意外发现 nil”。我对 Swift 和 xCode 很陌生,我真的不知道如何解决这个问题。
【问题讨论】:
-
让 amount = aDecoder.decodeDouble(forKey:PropertyKey.amountKey) as Double?为了安全起见,请确保将“金额”设为可选(添加为 Double?)Swift 3
-
required convenience init?(coder aDecoder: NSCoder) {方法在哪里结束? -
@Ahmad 谢谢你,那行得通。您能否发表您的评论作为答案,以便我“接受”它:)
-
@FrederikNorlykEriksen 很高兴为您提供帮助 :) 根据您的要求,我将其发布为答案
标签: ios swift swift3 xcode8 nscoding