首页 > 解决方案 > 找不到错误“模型的概述发布”的根本原因

问题描述

我有一个持续的崩溃,我找不到解决方案。在我的应用程序的一个模式视图中,用户可以创建几张卡片,当用户“完成”时,我收集创建的卡片并一张一张地发布它们(模式视图将被关闭)。我在下面有一个 Alamofire/Combine POST 调用,它将信息保存在用户创建的一张卡上。当我尝试发布数据时,我EXC_BAD_ACCESS在代码中的注释行上得到一个。

我有许多其他正常工作的 GET 和 POST 调用具有非常相似的方法主体,这是我所知道的唯一一种引发错误的方法。

class APIHandler {
    ...
    
    func postAdditionalCard(data: String) throws -> AnyPublisher<Card_AdditionalPostResponse, Error> {
        
        let postCardAdditionalReq = Card_AdditionalPostRequest(data: data)
        
        let paramData = try JSONEncoder().encode(postCardAdditionalReq)
        let params = try JSONSerialization.jsonObject(with: paramData, options: [])
        
        return try networking.authorizationHeader() //Helper that fetches, either locally or remotely,
                // the Authorization token and creates a authorization header with it
            .flatMap { authHeader -> AnyPublisher<Card_AdditionalPostResponse, Error> in
                
                self.networking.decodablePublisher(URL.cardAdditional, method: .post, parameters: params as? [String: Any], headers: [authHeader])
                    .mapError { _ in LANet.LANetError.genericError }
                    .eraseToAnyPublisher()
            }
            .eraseToAnyPublisher() //stack trace highlights this line with "EXC_BAD_ACCESS"
    }
    ...
}

Card_AdditionalPostRequest结构_

public struct Card_AdditionalPostRequest: Codable {
    
    let ucc_id: Int?
    let ucc_user_id: String
    let ucc_created_time: String?
    let ucc_description: String?
    let ucc_type: String
    
    public init(createdCard: Common_UserCard, task: Common_Task) {
        
        self.ucc_id = createdCard.ucc_id?.intValue
        self.ucc_user_id = createdCard.ucc_user_id ?? ""
        self.ucc_created_time = createdCard.ucc_created_time?.yyyy_MM_dd_HH_mm_SecString
        self.ucc_description = createdCard.ucc_description
        self.ucc_type = createdCard.ucc_type ?? ""
    }
}

调试导航器中显示的异常

#0  swift_release
#1  0x0000000103306c5f in outlined release of Card_AdditionalPostRequest ()
...

笔记 :

  1. networking是 Alamofire 的简单包装器。
  2. APIHandler 类与视图的生命周期无关,而是与整个应用程序(即在应用程序启动时创建)相关联。
  3. Card_AdditionalPostResponse就像任何其他模型一样。符合Codable并在其中包含一些数据的结构。
  4. parameters变量是可选的,如果我parameters: params as? [String: Any],从网络调用中删除,EXC_BAD_ACCESS异常就会消失,但额外的数据不会附加到调用中。

标签: iosswiftcombine

解决方案


推荐阅读