Swift + iOS,HANDYJSON 线程 1:EXC_BAD_ACCESS(代码=1,地址=0x20c7f4194)

Posted

技术标签:

【中文标题】Swift + iOS,HANDYJSON 线程 1:EXC_BAD_ACCESS(代码=1,地址=0x20c7f4194)【英文标题】:Swift + iOS , HANDYJSON Thread 1: EXC_BAD_ACCESS (code=1, address=0x20c7f4194) 【发布时间】:2018-04-01 09:02:51 【问题描述】:

从 api 解析 JSON 后反序列化结构时应用程序崩溃, 将 xCode 更新到 9.3 版后,开始出现崩溃 ,我无法弄清楚或诊断问题是什么或为什么会发生, 崩溃或错误在这里发生,如下图所示;

HANDYJSON/NominalTypeDescriptor/numberOfFields

import UIKit
import HandyJSON
import EventKit

class PlayersViewController:UIViewController
    var personsArray=[PersonData]()

            func getAllPlayers()
                let params = ["id":"5"]
                Communicator.performAsyncRequest(httpMethod: .post, apiName:Helper.sharedInstance().getActivityWithoutSyncID, parameters: params , showHUD: false)  (isSuccess, error, response, message) in

                    if isSuccess && response != nil 

                        let jsonData = try! JSONSerialization.data(withJSONObject: response as Any, options: JSONSerialization.WritingOptions.prettyPrinted)
                        let jsonString = NSString(data: jsonData, encoding: String.Encoding.utf8.rawValue)! as String

                        print(jsonString)

                        if let Persons = PersonStruct.deserialize(from: jsonString) 
                            if Persons.Status == "S200"
                                for person in PersonsStruct.Data 
                                    self.personsArray.append(person)
                                
                            
                        
                      
                    
         
        struct PersonStruct: HandyJSON 
            var Status:String?
            var Data=[PersonData]()
            var Error = [String]()
            var Extra = SyncActivityStructExtra()
        
        struct PersonData:HandyJSON
            var id:String?
            var name:String?
            var phoneNumber:String?    
        

提前致谢!

【问题讨论】:

请以文本形式显示您的代码,以及所有相关部分。 我忍不住注意到 HandyJSON 项目的 README 中的以下内容,“HandyJSON 完全依赖于从 Swift 运行时代码中推断出的内存布局规则。我们正在关注它,并将遵循每一点如果它改变了。” 【参考方案1】:

HandyJSON 项目中已经报告了该问题,并且似乎有解决方案。所以你有三个选择

    降级到 Swift 4.0 并等待下一个版本 下载代码并自己实现the fix 为 JSON 寻找其他解决方案,例如使用 Codable 内置的 Swift 支持。

【讨论】:

以上是关于Swift + iOS,HANDYJSON 线程 1:EXC_BAD_ACCESS(代码=1,地址=0x20c7f4194)的主要内容,如果未能解决你的问题,请参考以下文章

阿里巴巴最新开源项目 - [HandyJSON] 在Swift中优雅地处理JSON

swift4.1升级到 HandyJSON crash

HandyJSON:Swift语言JSON转Model工具库

handyJson的技术内核

使用HandyJSON导致的内存泄漏问题相关解决方法

Swift 对象内存模型探究