Swift 中 JSON 写入(NSConcreteMutableData)中的类型无效

Posted

技术标签:

【中文标题】Swift 中 JSON 写入(NSConcreteMutableData)中的类型无效【英文标题】:Invalid type in JSON write (NSConcreteMutableData) in Swift 【发布时间】:2016-03-09 09:59:00 【问题描述】:

我调用 Rest API 以调用我有一些作为字典格式的参数并在某些时候传递给 api 我在转换子类型中崩溃

这里是我的示例代码:

    let configuration = NSURLSessionConfiguration .defaultSessionConfiguration()
    let session = NSURLSession(configuration: configuration)

    self.profieImage = UIImage(named: "calendar.png")

    let imageData = UIImageJPEGRepresentation(self.profieImage, 1)

    let params = ["fname":"Martin","lname":"Raj","gender":"Male","dob":"1997-9-14","email":"xx@gmail.com","mobileNumber":"00000","pancard":"vvvv","profileImg":imageData!] as Dictionary!

    let urlString = NSString(format:"http://my.api.call");
    print("url string is \(urlString)")
    let request : NSMutableURLRequest = NSMutableURLRequest()
    request.URL = NSURL(string: NSString(format: "%@", urlString)as String)
    request.HTTPMethod = "POST"
    request.timeoutInterval = 30
    request.addValue("mobile", forHTTPHeaderField: "true")
    request.addValue("token", forHTTPHeaderField: "")
    request.HTTPBody  = try! NSJSONSerialization.dataWithJSONObject(params, options: [])



    let dataTask = session.dataTaskWithRequest(request)
        
            (let data: NSData?, let response: NSURLResponse?, let error: NSError?) -> Void in
            // 1: Check HTTP Response for successful GET request
            guard let httpResponse = response as? NSHTTPURLResponse, receivedData = data
                else 
                    print("error: not a valid http response")
                    return
            

            switch (httpResponse.statusCode)
            case 200:
                let response = NSString (data: receivedData, encoding: NSUTF8StringEncoding)

                print("response==\(response)")

                default:
                break
                
    

我的日志打印了这个语句:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (NSConcreteMutableData)'

【问题讨论】:

【参考方案1】:

错误信息很清楚:

不支持 JSON 格式的NSData

例如,您可以将数据转换为 Base-64 编码字符串

let imageDataBase64 = imageData!.base64EncodedStringWithOptions([])
let params = ["fname":"Martin","lname":"Raj","gender":"Male","dob":"1997-9-14","email":"xx@gmail.com","mobileNumber":"00000","pancard":"vvvv","profileImg":imageDataBase64]

在服务器端,您需要将字符串解码回NSData

params 是一个非可选字典(编译器可以推断),类型转换为隐式解包 Dictionary 是没有意义的,也不需要。

【讨论】:

嗨,谢谢你的回答。但现在我将此作为输出日志错误=可选(错误域=NSURLErrorDomain Code=-1005“网络连接丢失。” UserInfo=NSUnderlyingError=0x7f8fbb828460 Error Domain=kCFErrorDomainCFNetwork Code=-1005“(null)”UserInfo= _kCFStreamErrorCodeKey=-4, _kCFStreamErrorDomainKey=4, NSErrorFailingURLStringKey=my.api.call, NSErrorFailingURLKey=milestogether.in/api/v1/user, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-4, NSLocalizedDescription=网络连接丢失。) 我的网络运行良好 之前的 api 调用我得到响应 无论如何你都不能在 JSON 字符串中发送NSData 你的回答很好,当你收到这个评论时你能回复一个小问题吗?

以上是关于Swift 中 JSON 写入(NSConcreteMutableData)中的类型无效的主要内容,如果未能解决你的问题,请参考以下文章

Swift - JSON 写入中的***类型无效

Swift 中 JSON 写入(NSConcreteMutableData)中的类型无效

如何使用与 NewtonSoft (JSON.Net) 组件中的 JSON 匹配的 Swift 类从/向 JSON 读取/写入对象数组?

JSON写入Swift 4中的***类型无效

Swift:写入 JSON 并在本地保存到 iPhone 文件

Swift 5 (Xcode 11 Betas 5 & 6) - 如何写入 JSON 文件?