【发布时间】:2014-06-15 15:33:39
【问题描述】:
我在以下类中遇到上述编译器错误:
class Log: NSObject, NSCoding {
var targetHoursPerWeek: Double
var weeksLog: Double[]
// Serialization keys that are using to implement NSCoding.
struct SerializationKey {
static let targetHoursPerWeek = "targetHoursPerWeek"
static let weeksLog = "weeksLog"
}
init() {
targetHoursPerWeek = 7.0
weeksLog = Double[](count: 7, repeatedValue: 0.0)
// [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
}
// MARK: NSCoding
init(coder decoder: NSCoder) {
targetHoursPerWeek = decoder.decodeObjectForKey(SerializationKey.targetHoursPerWeek) as Double
weeksLog = decoder.decodeObjectForKey(SerializationKey.weeksLog) as Double[]
}
func encodeWithCoder(encoder: NSCoder) {
encoder.encodeObject(targetHoursPerWeek, forKey: SerializationKey.targetHoursPerWeek)
encoder.encodeObject(weeksLog, forKey: SerializationKey.weeksLog)
}
}
我认为错误来自线路
weeksLog = decoder.decodeObjectForKey(SerializationKey.weeksLog) as Double[]
但如果是这样的话,我很难过——“as Double[]”同意“weeksLog”的声明。 所以我被难住了!
【问题讨论】:
-
我复制了这个并阅读了完整的编译器错误消息。在较低的级别上出现了问题。所以这肯定是一个错误。你应该举报。
-
但是你错了:如果你删除这一行,编译器运行良好:encoder.encodeObject(weeksLog, forKey: SerializationKey.weeksLog)。也许您可以编写一个不会导致编译器出现问题的解决方法。
-
我会尝试解决方法。你有什么建议吗?
-
感谢您指出错误位置。这给了我一些工作。
-
现在可以使用了:encoder.encodeObject(weeksLog as AnyObject[], forKey: SerializationKey.weeksLog) 谢谢!!