【发布时间】:2014-11-12 14:54:52
【问题描述】:
我尝试使用 NSCoding 持久化我的对象,但我总是得到 BAD_ACCESS ERROR 为了避免多个变量,类,我将所有公共变量放在 RObject 中。我认为我在初始化时做错了,但我不知道是什么。
错误出现在此函数中
func parseInfo(allInfos : String) -> Void {
if let all : JSON = JSON.parse(allInfos) as JSON? {
if let info = all.asArray
{
for description in info
{
var track : RInfo = SCTracks(js: description)
self.arrayTracks.addObject(track)
} // Therad 1: EXC_BAD_ACCESS(code=2, address=0x27...)
}
}
}
日志不显示任何内容
我的普通班
class RObject : NSObject, NSCoding {
var id : Int? = 0
var kind : String?
override init() { super.init() }
init(js :JSON) {
self.kind = js["kind"].asString
self.id = js["id"].asInt
super.init()
}
required
init(coder aDecoder: NSCoder) {
self.id = aDecoder.decodeIntegerForKey("id") as Int
self.kind = aDecoder.decodeObjectForKey("kind") as? String
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeInteger(self.id!, forKey: "id")
aCoder.encodeObject(self.kind, forKey: "kind")
}
}
继承自 RObject 的我的类 Rinfo
class RInfo : RObject {
var title :String?
var uri :String?
var license :String?
var release :String?
var user :RUser!
override init() { super.init() }
required init(coder: NSCoder) {
self.title = coder.decodeObjectForKey("title") as? String
self.user = coder.decodeObjectForKey("user") as RUser
self.license = coder.decodeObjectForKey("license") as? String
self.uri = coder.decodeObjectForKey("uri") as? String
self.release = coder.decodeObjectForKey("release") as? String
super.init(coder: coder)
}
init(js :JSON) {
self.user = js(js: js["user"])
self.title = js["title"].asString
self.license = js["license"].asString
self.uri = js["uri"].asString
self.release = js["release"].asString
super.init(js: js)
}
override func encodeWithCoder(encoder: NSCoder) {
encoder.encodeObject(self.title, forKey: "title")
encoder.encodeObject(self.user, forKey: "user")
encoder.encodeObject(self.uri, forKey: "uri")
encoder.encodeObject(self.license, forKey: "license")
}
}
感谢您的帮助!
【问题讨论】:
-
什么是崩溃日志 - 它提供了更多关于出现问题的信息。
-
我看不出崩溃函数与给定代码的其余部分有何关联。
-
我看到
RInfo.encodeWithCoder没有调用super.encodeWithCoder,但这也不能解释崩溃,或者为什么你认为它与NSCodingRObject.init(coder:)也有任何关系不调用 super。 -
在我将
NSObject,NSCoding设置为RObject之前,一切正常。当我可以实例化我的类RInfo时,问题就来了,我的初始化是错误的
标签: ios swift nsobject nscoding