2016-05-30 54 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。