首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >仅在64位设备上编码的NSCoding崩溃

仅在64位设备上编码的NSCoding崩溃
EN

Stack Overflow用户
提问于 2016-03-19 01:38:40
回答 1查看 547关注 0票数 0

我有两个自定义数据结构,一个名为PaxData,另一个是ManifestData,基本上ManifestData包含一个PaxData数组。

现在这一切都很好,然后我实现了我的NSCoding,以拥有永久的存储。我将它添加到我的PaxData和ManifestData文件中。然后我用iPhone 4S在模拟器上试了一下,效果很好。然后用iPad Air..。这里出了车祸:

代码语言:javascript
复制
aCoder.encodeObject(manifestPax, forKey: PropertyKey.manifestPaxKey)

我的错误:线程1: EXC_BAD_ACCESS(code=EXC_I386_GPFLT)

现在我的manifestPax = PaxData

事故发生后,我开始挖掘,试图找到一个解决方案,最终我发现我的应用程序总是在64位设备上崩溃,每次我在非64位(4s-5-iPad 2)上运行它时,它都能工作!

所以现在我没有主意了..。如能提供任何帮助,将不胜感激。

下面是我的ManifestData.swift文件的更多内容:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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)
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-19 20:08:57

所以我找到了一种方法来修复它,运行测试,而且它有效,它实际上是非常愚蠢的。我进入了构建设置,一起删除了arm64条目,在模拟器上运行了应用程序,停止了它,然后在支持的体系结构列表中重新添加了arm64。

现在起作用了!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36096866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档