ios - 如何在 swift 中使用 BLOB 将字节数组 [UInt8] 存储和检索到 sqlite3 数据库中?

标签 ios swift sqlite nsuserdefaults

let arr: [UInt8] =  [0x14, 0x00, 0xAB, 0x45, 0x49, 0x1F, 0xEF, 0x15, 0xA8, 0x89, 0x78, 0x0F, 0x09, 0xA9, 0x07, 0xB0, 0x01, 0x20, 0x01, 0x4E, 0x38, 0x32, 0x35, 0x56, 0x20, 0x20, 0x20, 0x00]

我如何存储在 sqlite3NSUserDefaults

我试过这样

 let arrData = NSData(bytes: &arr, length: (arr?.count)!)

 let d = NSUserDefaults.standardUserDefaults()
 d.setObject(arrData, forKey: "mydata")
 d.synchronize()

 let obj = d.objectForKey("mydata")
 let objData = obj as! NSData
 let resultArr = NSKeyedUnarchiver.unarchiveObjectWithData(objData) as! [UInt8]
 print(resultArr.count)

最佳答案

对于 NSUserDefaults:

let integersToStore: [UInt8] = [0x14, 0x00, 0xAB, 0x45, 0x49, 0x1F, 0xEF, 0x15, 0xA8, 0x89, 0x78, 0x0F, 0x09, 0xA9, 0x07, 0xB0, 0x01, 0x20, 0x01, 0x4E, 0x38, 0x32, 0x35, 0x56, 0x20, 0x20, 0x20, 0x00]

let dataToStore = NSData(bytes: integersToStore, length: integersToStore.count)

let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(dataToStore, forKey: "mydata")
defaults.synchronize()

// get the data we stored in NSUserDefaults
if let readData = defaults.dataForKey("mydata") {

    // determine the number of UInt8 to read from this data
    let count = readData.length / sizeof(UInt8)

    // create a new UInt8 array with the correct count
    var readArray = [UInt8](count: count, repeatedValue: 0)

    // copy data into array
    readData.getBytes(&readArray, length: count * sizeof(UInt8))

    // readArray has what you need
    print(readArray)
}

注意:在 playground 中测试时,不要指望得到正确的结果。

关于ios - 如何在 swift 中使用 BLOB 将字节数组 [UInt8] 存储和检索到 sqlite3 数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37026262/

相关文章:

ios - 非常简单的基本 OCMock stub 不起作用

swift - 关于 Swift 选择器的 4 个问题

ios - 使用 panGestureRecognizer 进行滑出 View 时获取 "unexpectedly found nil while unwrapping an Optional value"

ios - Xcode 9 模拟器不保存 userdefaults

iOS 蓝牙与设备配对和取消配对

swift - arkit anchor 或节点在相机中可见,位于截锥体的左侧或右侧

python - 如何从 sqlite 中获取一个 µ 字符并放到网页上?

sql - 在带有参数的AND/OR运算符中使用MATCH在SQLite中不起作用

android - Sqlite死锁问题

ios - Swift 4 - 更新隐私设置 CLLocationManager 后刷新 View