2016-03-19 10 views
0

2つのカスタムデータ構造、1つはPaxData、もう1つはManifestData、appは基本的にManifestDataにPaxDataの配列が含まれています。64ビットデバイスでのエンコード時のNSCodingクラッシュ

これですべて正常に動作しました。次に、NSCodingを実装して、永続的なストレージを確保しました。私はPaxDataと私のManifestDataファイルに追加しました。それから、私はiPhone 4Sでシミュレータを試してみました。後に[PaxData]

に= EXC_BAD_ACCESS(コード= EXC_I386_GPFLT)

今私のmanifestPaxは次のとおりです。

aCoder.encodeObject(manifestPax, forKey: PropertyKey.manifestPaxKey) 

マイエラー:スレッド1次にiPadの空気で試してみました...ここにクラッシュしました私が掘り起こした解決策を見つけようとするクラッシュは、私のアプリケーションが64ビットデバイスで常にクラッシュしていることをわかった。ノン64ビット(4-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) 
} 

EDIT:ここに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) 
} 
+0

このソリューションをお試しください。http://stackoverflow.com/questions/34707643/32-bit-app-with-dynamic-library-crash-on-64-bit-device – iMuzahid

+0

'PaxData'とは何ですか? – Lumialxk

+0

'PaxData'の実装(' encodeWithCoder(_ :) 'と' init(coder:) 'メソッドの実装を投稿できますか?) – paulvs

答えて

0

私はそれを修正する方法を見つけ、テストを実行し、それは実際には非常にばかげている。私はBuild設定に行き、arm64エントリを一括して削除し、シミュレータ上でアプリケーションを実行して停止させ、サポートされているアーキテクチャのリストにarm64を再追加しました。

enter image description here

それが動作するようになりました!

関連する問題