Search code examples
sqliteswiftblobnsdata

read blob data extra argument bytes in call swift


I am trying to read blob data from sqlite, but I get Extra argument 'bytes' in call error.

Here is my code:

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

Solution

  • sqlite3_column_bytes returns an Int32, but NSData(bytes:, length: ) expects an Int as second argument, therefore you have to convert the value explicitly:

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

    Note also that this NSData initializer does not return an optional, so assigning it to an var dbData:NSData? makes not much sense, and even then dbData will never be nil.

    What you can do is to check if sqlite3_column_blob() returned nil or not:

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