Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 如何使用;addAttributeMappings“;在RestKit中?_Json_Restkit_Dto_Addattribute_Rkobjectmapping - Fatal编程技术网

Json 如何使用;addAttributeMappings“;在RestKit中?

Json 如何使用;addAttributeMappings“;在RestKit中?,json,restkit,dto,addattribute,rkobjectmapping,Json,Restkit,Dto,Addattribute,Rkobjectmapping,我的json响应不仅包含字符串,还包含DTO数组。对象映射的格式不正确 json响应主体: 下面给出的是我的实体模型。(请注意,dynamicTableDetailDTOList是DTO的数组): 在我的ViewController中,调用回调方法, 在LoanDetailService类中,实现了与服务调用相关的所有代码: 如何更改实体模型?以下内容解决了我的问题: 在LoanDetailServiceClass中 func getLoanDetails(success: @escaping(

我的json响应不仅包含字符串,还包含DTO数组。对象映射的格式不正确

json响应主体: 下面给出的是我的实体模型。(请注意,dynamicTableDetailDTOList是DTO的数组): 在我的ViewController中,调用回调方法, 在LoanDetailService类中,实现了与服务调用相关的所有代码:
如何更改实体模型?以下内容解决了我的问题:

在LoanDetailServiceClass中

func getLoanDetails(success: @escaping((_ loanDetailModel: LoanDetailModel?) -> ()),
                failure: @escaping ((_ error:String) -> ())) {

    // Define mappings
    let postMapping: RKObjectMapping = RKObjectMapping(for: LoanDetailModel.self)
    postMapping.addAttributeMappings(from: ["id","componentName"])

    let dTOListMapping: RKObjectMapping = RKObjectMapping(for: DynamicTableDetailDTOList.self)
    dTOListMapping.addAttributeMappings(from: ["fieldName",
                                               "fieldType",
                                               "label"])
    postMapping.addRelationshipMapping(withSourceKeyPath: "DynamicTableDetailDTOList" ,
                                       mapping: dTOListMapping)

    // Define response decriptor
    let statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClass.successful)
    let resDescriptor = RKResponseDescriptor(mapping: postMapping, method: RKRequestMethod.GET, pathPattern: nil, keyPath: nil, statusCodes: statusCodes)

    // Create object manager
    let url = URL(string: baseURL)
    let jsonPlaceholderManager = RKObjectManager(baseURL: url)
    jsonPlaceholderManager?.addResponseDescriptor(resDescriptor)
    RKObjectManager.setShared(jsonPlaceholderManager)

    // Perform GET request
    RKObjectManager.shared().getObjectsAtPath(appendedURL, parameters: nil, success: { (operation, mappingResult) -> Void in
        let loanDetailModel: LoanDetailModel = mappingResult!.firstObject as! LoanDetailModel
        success(loanDetailModel)

    }) { (operation, error) -> Void in
        failure((error?.localizedDescription)!)
    }
}
class LoanDetailModel: NSObject {

    var id:Any?
    var componentName = ""
    var dynamicTableDetailDTOList:[DynamicTableDetailDTOList] = []
}

class DynamicTableDetailDTOList: NSObject {

    var id:Int?
    var fieldName:String = ""
    var fieldType:String = ""
    var isJoin:Bool?
    var length:Int?
    var label:String = ""
    var isrequired:Bool?
    var searchable:Bool?
}
override func viewDidLoad() {
    super.viewDidLoad()

    let loanDetailService = LoanDetailService()
    loanDetailService.getLoanDetails(success: { (model) in
        self.loanDetailModel = model!
        self.loanDetailTable.reloadData()
    })
    { (errorString) in
        let alert = UIAlertController(title: "Alert",
                                      message: errorString,
                                      preferredStyle: UIAlertControllerStyle.alert)
        alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: nil))
        self.present(alert, animated: true, completion: nil)
    }
}
func getLoanDetails(success: @escaping((_ loanDetailModel: LoanDetailModel?) -> ()),
                    failure: @escaping ((_ error:String) -> ())) {

    // Define mappings
    let postMapping: RKObjectMapping = RKObjectMapping(for: LoanDetailModel.self)
    postMapping.addAttributeMappings(from: ["id", "componentName", "dynamicTableDetailDTOList"])


    // Define response decriptor
    let statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClass.successful)
    let resDescriptor = RKResponseDescriptor(mapping: postMapping, method: RKRequestMethod.GET, pathPattern: nil, keyPath: nil, statusCodes: statusCodes)

    // Create object manager
    let url = URL(string: baseURL)
    let jsonPlaceholderManager = RKObjectManager(baseURL: url)
    jsonPlaceholderManager?.addResponseDescriptor(resDescriptor)
    RKObjectManager.setShared(jsonPlaceholderManager)

    // Perform GET request
    RKObjectManager.shared().getObjectsAtPath(appendedURL, parameters: nil, success: { (operation, mappingResult) -> Void in
        let loanDetailModel: LoanDetailModel = mappingResult!.firstObject as! LoanDetailModel
        success(loanDetailModel)

    }) { (operation, error) -> Void in
        failure((error?.localizedDescription)!)
    }

}
func getLoanDetails(success: @escaping((_ loanDetailModel: LoanDetailModel?) -> ()),
                failure: @escaping ((_ error:String) -> ())) {

    // Define mappings
    let postMapping: RKObjectMapping = RKObjectMapping(for: LoanDetailModel.self)
    postMapping.addAttributeMappings(from: ["id","componentName"])

    let dTOListMapping: RKObjectMapping = RKObjectMapping(for: DynamicTableDetailDTOList.self)
    dTOListMapping.addAttributeMappings(from: ["fieldName",
                                               "fieldType",
                                               "label"])
    postMapping.addRelationshipMapping(withSourceKeyPath: "DynamicTableDetailDTOList" ,
                                       mapping: dTOListMapping)

    // Define response decriptor
    let statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClass.successful)
    let resDescriptor = RKResponseDescriptor(mapping: postMapping, method: RKRequestMethod.GET, pathPattern: nil, keyPath: nil, statusCodes: statusCodes)

    // Create object manager
    let url = URL(string: baseURL)
    let jsonPlaceholderManager = RKObjectManager(baseURL: url)
    jsonPlaceholderManager?.addResponseDescriptor(resDescriptor)
    RKObjectManager.setShared(jsonPlaceholderManager)

    // Perform GET request
    RKObjectManager.shared().getObjectsAtPath(appendedURL, parameters: nil, success: { (operation, mappingResult) -> Void in
        let loanDetailModel: LoanDetailModel = mappingResult!.firstObject as! LoanDetailModel
        success(loanDetailModel)

    }) { (operation, error) -> Void in
        failure((error?.localizedDescription)!)
    }
}