【问题标题】:read blob data extra argument bytes in call swift在调用swift中读取blob数据额外的参数字节
【发布时间】:2015-04-02 14:14:15
【问题描述】:

我正在尝试从 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!)
}

【问题讨论】:

    标签: sqlite swift blob nsdata


    【解决方案1】:

    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))
        // ...
    }
    

    【讨论】:

      【解决方案2】:

      在 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))
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 2015-09-13
        • 2018-08-26
        • 2017-01-22
        • 1970-01-01
        相关资源
        最近更新 更多