我已创建了一个音频文件,我想附加到"订单" Salesforce中的对象。该文件的路径位于theSoundPath
。
以下代码会导致错误显示为:'NSInvalidArgumentException', reason: 'Invalid type in JSON write (NSConcreteData)'
我根据API的要求在base64中编码文件。但我也在想这是什么引发了这个错误。如果有人能指出我正确的方向,我将不胜感激。
以下是相关代码(使用SwiftyJSON和Alamofire):
let encodedSound = NSFileManager.defaultManager().contentsAtPath(self.theSoundPath)
let encodedBase64Sound = encodedSound!.base64EncodedDataWithOptions(nil)
let tokenParam = "Bearer " + theToken // Bearer prefix required by API
let theWriteURL = theInstance + "/services/data/v33.0/sobjects/Order/" + self.theOrder + "/Attachment/"
let URL = NSURL(string: theWriteURL)!
let mutableURLRequest = NSMutableURLRequest(URL: URL)
mutableURLRequest.HTTPMethod = "POST"
let parameters = [
"AccountId": "001xxxxxxxxxxxx",
"Name": "testfile.aac",
"Body": encodedBase64Sound
]
var JSONSerializationError: NSError? = nil
mutableURLRequest.HTTPBody = NSJSONSerialization.dataWithJSONObject(parameters, options: nil, error: &JSONSerializationError)
mutableURLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
mutableURLRequest.setValue(tokenParam, forHTTPHeaderField: "Authorization")
Alamofire.request(mutableURLRequest)
.responseJSON { (req, res, json, error) in // . . . etc.
答案 0 :(得分:2)
可以转换为JSON的对象必须具有以下内容 属性:
顶级对象是NSArray或NSDictionary。
所有对象都是NSString,NSNumber,NSArray的实例, NSDictionary,或NSNull。
所有字典键都是NSString的实例。
数字不是NaN或无穷大。
但您尝试序列化NSData对象,即
的结果encodedBase64Sound = encodedSound!.base64EncodedDataWithOptions(nil)
而是创建一个base64字符串
encodedBase64Sound = encodedSound!.base64EncodedStringWithOptions(nil)