gpt4 book ai didi

ios - 仅在 64 位设备上进行编码时 NSCoding 崩溃

转载 作者:行者123 更新时间:2023-11-30 13:35:42 25 4
gpt4 key购买 nike

我有一个带有 2 个自定义数据结构的应用程序,其中一个名为 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)
}

最佳答案

所以我找到了一种方法来修复它,进行了测试,并且它有效,这实际上是非常愚蠢的。我进入“build设置”,将arm64条目全部删除,在模拟器上运行该应用程序,停止它,然后在支持的架构列表中重新添加arm64。

enter image description here

现在可以了!

关于ios - 仅在 64 位设备上进行编码时 NSCoding 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36096866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com