在swift中读取blob数据额外参数字节

时间:2015-02-03 11:38:43

标签: sqlite swift blob nsdata

我正在尝试从sqlite读取blob数据,但我收到Extra argument 'bytes' in call错误。

这是我的代码:

var len = sqlite3_column_bytes(compiledStatement, 0)
var point = sqlite3_column_blob(compiledStatement, 0)
var dbData:NSData? = NSData(bytes: point, length: len)// ERROR: Extra argument 'bytes' in call

if dbData != nil
{
   arrDataRow.addObject(dbData!)
}

2 个答案:

答案 0 :(得分:6)

sqlite3_column_bytes会返回Int32,但是 NSData(bytes:, length: )期望Int作为第二个参数, 因此,您必须明确转换该值:

let dbData = NSData(bytes: point, length: Int(len))

另请注意,此NSData初始化程序返回可选项, 所以将它分配给var dbData:NSData?没有多大意义, 即便如此,dbData永远不会是nil

你能做什么 是检查sqlite3_column_blob()是否返回nil

let len = sqlite3_column_bytes(compiledStatement, 0)
let point = sqlite3_column_blob(compiledStatement, 0)
if point != nil {
    let dbData = NSData(bytes: point, length: Int(len))
    // ...
}

答案 1 :(得分:0)

在Swift 4.2中

if let dataBlob = sqlite3_column_blob(albumQueryPointer, 0){
    let dataBlobLength = sqlite3_column_bytes(albumQueryPointer, 0)
    let data = Data(bytes: dataBlob, count: Int(dataBlobLength))
}