【问题标题】:Add Array as a dictionary value添加数组作为字典值
【发布时间】:2018-04-22 16:28:48
【问题描述】:

我正在尝试像这样向服务器发布一些参数:

["name":"john" , "age":"25"]

但是有key/value 需要一组数组,称为tags,当我像这样将它添加到字典时

tagsArray = ["#tag1" , "#tag2" , "#tag3"]

["tags":tagsArray] as [String:Any]

我的应用程序由于此错误而崩溃:

-[Swift._SwiftDeferredNSArray dataUsingEncoding:]:无法识别的选择器发送到实例 0x600000234080

*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[Swift._SwiftDeferredNSArray dataUsingEncoding:]: 无法识别的选择器发送到实例 0x600000234080'

我应该如何在字典的值中添加数组?

已编辑:

let parameters = ["hash":appDefaults.getUserHash() ,  "string": vHash , "media_title":vTitle , "description":vDescription , "Keywords[]":insertTagArray] as [String : Any]

            Alamofire.upload(multipartFormData: { multipartFormData in

                 multipartFormData.append(imgData, withName: "photofileupload",fileName: "file.jpg", mimeType: "image/jpg")

                for (key, value) in parameters {
                    multipartFormData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key)
                }
            },
                             to:URLserver)
/// rest of code 

【问题讨论】:

  • 您能否提供更多代码,看起来您将字典转换为数据?
  • @NeilFaulkner 检查已编辑 Q
  • appDefaults.getUserHash()、vHash、vTitle 等是什么类型...所有字符串?
  • @NeilFaulkner 是的,它们都是字符串

标签: ios swift dictionary alamofire


【解决方案1】:

当您遍历字典时,它会崩溃,因为您尝试对数组而不是数组中的字符串进行编码。您还应该遍历字符串数组并对它们进行编码。您可以尝试这样做:

Alamofire.upload(multipartFormData: { multipartFormData in

        multipartFormData.append(imgData, withName: "photofileupload",fileName: "file.jpg", mimeType: "image/jpg")

        for (key, value) in parameters {

            if let tagsArray = value as? [String]{

                let stringsData = NSMutableData()
                for tag in tagsArray{
                    if let stringData = string.dataUsingEncoding(NSUTF8StringEncoding) {
                        stringsData.appendData(stringData)
                    }
                }

                multipartFormData.append(stringsData), withName: key)
            }
            else if let stringValue = value as? String{

                multipartFormData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key)

            }

        },to:URLserver)

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    相关资源
    最近更新 更多