我有两个自定义数据结构,一个名为PaxData,另一个是ManifestData,基本上ManifestData包含一个PaxData数组。
现在这一切都很好,然后我实现了我的NSCoding,以拥有永久的存储。我将它添加到我的PaxData和ManifestData文件中。然后我用iPhone 4S在模拟器上试了一下,效果很好。然后用iPad Air..。这里出了车祸:
aCoder.encodeObject(manifestPax, forKey: PropertyKey.manifestPaxKey)我的错误:线程1: EXC_BAD_ACCESS(code=EXC_I386_GPFLT)
现在我的manifestPax = PaxData
事故发生后,我开始挖掘,试图找到一个解决方案,最终我发现我的应用程序总是在64位设备上崩溃,每次我在非64位(4s-5-iPad 2)上运行它时,它都能工作!
所以现在我没有主意了..。如能提供任何帮助,将不胜感激。
下面是我的ManifestData.swift文件的更多内容:
init?(date: NSDate, pilotName: String, acReg: String, manifestPax: [PaxData]) {
self.date = date
self.pilotName = pilotName
self.acReg = acReg
self.manifestPax = manifestPax
super.init()
if pilotName.isEmpty || acReg.isEmpty || manifestPax.isEmpty {
return nil
}
}
// MARK : NSCoding
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(date, forKey: PropertyKey.dateKey)
aCoder.encodeObject(pilotName, forKey: PropertyKey.pilotNameKey)
aCoder.encodeObject(acReg, forKey: PropertyKey.acRegKey)
aCoder.encodeObject(manifestPax, forKey: PropertyKey.manifestPaxKey)
}
required convenience init?(coder aDecoder: NSCoder) {
let date = aDecoder.decodeObjectForKey(PropertyKey.dateKey) as! NSDate
let pilotName = aDecoder.decodeObjectForKey(PropertyKey.pilotNameKey) as! String
let acReg = aDecoder.decodeObjectForKey(PropertyKey.acRegKey) as! String
let manifestPax = aDecoder.decodeObjectForKey(PropertyKey.manifestPaxKey) as! [PaxData]
self.init(date: date, pilotName: pilotName, acReg: acReg, manifestPax: manifestPax)
}编辑:这里是PaxData.swift:
init?(paxName: String, paxWeight: String, paxEmergencyName: String, paxEmergencyPhone: String, paxDestinationComments: String) {
self.paxName = paxName
self.paxWeight = paxWeight
self.paxEmergencyName = paxEmergencyName
self.paxEmergencyPhone = paxEmergencyPhone
self.paxDestinationComments = paxDestinationComments
super.init()
if paxName.isEmpty || paxWeight.isEmpty || paxEmergencyName.isEmpty || paxEmergencyPhone.isEmpty || paxDestinationComments.isEmpty {
return nil
}
}
// MARK : NSCoding
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(paxName, forKey: PropertyKey.paxNameKey)
aCoder.encodeObject(paxWeight, forKey: PropertyKey.paxWeightKey)
aCoder.encodeObject(paxEmergencyPhone, forKey: PropertyKey.paxEmergencyPhoneKey)
aCoder.encodeObject(paxEmergencyName, forKey: PropertyKey.paxEmergencyNameKey)
aCoder.encodeObject(paxDestinationComments, forKey: PropertyKey.paxDestinationCommentKey)
}
required convenience init?(coder aDecoder: NSCoder) {
let paxName = aDecoder.decodeObjectForKey(PropertyKey.paxNameKey) as! String
let paxWeight = aDecoder.decodeObjectForKey(PropertyKey.paxWeightKey) as! String
let paxEmergencyName = aDecoder.decodeObjectForKey(PropertyKey.paxEmergencyNameKey) as! String
let paxEmergencyPhone = aDecoder.decodeObjectForKey(PropertyKey.paxEmergencyPhoneKey) as! String
let paxDestinationComments = aDecoder.decodeObjectForKey(PropertyKey.paxDestinationCommentKey) as! String
self.init(paxName: paxName, paxWeight: paxWeight, paxEmergencyName: paxEmergencyName, paxEmergencyPhone: paxEmergencyPhone, paxDestinationComments: paxDestinationComments)
}发布于 2016-03-19 20:08:57
所以我找到了一种方法来修复它,运行测试,而且它有效,它实际上是非常愚蠢的。我进入了构建设置,一起删除了arm64条目,在模拟器上运行了应用程序,停止了它,然后在支持的体系结构列表中重新添加了arm64。

现在起作用了!
https://stackoverflow.com/questions/36096866
复制相似问题