2016-05-30 85 views
-1

我tryed的NSData base64Encode回零迅速

let contents = results["contents"] as! String! 
let decodedData = NSData(base64EncodedString: contents, 
options:NSDataBase64DecodingOptions()) 
let decodedString = NSString(data: decodedData!, encoding: NSUTF8StringEncoding) 





let contents = results["contents"] as! String! 
let decodedData = NSData(base64EncodedString: contents, options:NSDataBase64DecodingOptions.IgnoreUnknownCharacters) 
let decodedString = NSString(data: decodedData!, encoding: NSUTF8StringEncoding) 



let contents = results["contents"] as! String! 
let decodedData = NSData(base64EncodedString: contents, options:NSDataBase64DecodingOptions(rawValue: 0)!) 
let decodedString = NSString(data: decodedData!, encoding: NSUTF8StringEncoding) 

总是EXC_BAC_INSTRUCTION从decodedString 也许decodedData返回nil

为什么NSData的返回nil

回答

0

使用.Encoding64CharacterLineLength作为选项,并应用.base64EncodedStringWithOptions的数据:

if let contents = results["contents"] as? String, 
     decodedData = NSData(base64EncodedString: contents, options:NSDataBase64DecodingOptions(rawValue: 0)) { 
    let decodedString = decodedData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength) 
} 
-1

你正在使用这么多的解压操作符(!);不要这样做!

如果results没有映射关键字"contents"

如果results有一个"contents"密钥的映射,但它不是String

如果results有一个"contents"密钥的映射,它是一个String,但它不是有效的Base 64编码数据?在这种情况下,NSData的初始化将失败,并返回nil。