gpt4 book ai didi

ios - Swift:从 SQLite.swift 访问 NULL 值时应用程序崩溃

转载 作者:行者123 更新时间:2023-11-28 14:21:54 25 4
gpt4 key购买 nike

我刚开始学习 Swift4。我已经阅读了所有关于堆栈溢出重复问题的建议,但我无法解决或理解我的问题。

我正在从 SQLite.swift 数据库中获取数据:

ViewController.swift:

import Foundation
import SQLite

// Load DB with SQLite.swift
let path = Bundle.main.path(forResource: "myDataBaseFile", ofType: "sqlite")!
let db = try! Connection(path, readonly: true)

// SQLite.swift define table
let table = Table("table")

// SQLite.swift define columns
let id = Expression<Int>("id")
let medium = Expression<String>("medium")

// Function to get query result
func queryForMedium(idForQuery: Int) -> String? {
let media = try? db.scalar(table.select(medium).filter(id == idForQuery))
return media
}

// ViewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.

// Value for ID = 2 access a SQL Null value
anOptionalString = queryForMedium(idForQuery: 2)

if anOptionalString != nil {
print("Contains a value!")
} else {
print("Doesn’t contain a value.")
}

}

结果:

  • ID = 1 包含“测试”-> 应用程序运行:控制台输出:
    包含一个值!
  • ID = 2 包含 NULL -> CRASH:控制台输出:
    SQLite 是经过优化编译的 - 单步执行可能会出现异常;变量可能不可用。

Xcode Screenshot after App Crash

注意:我试过禁用Optimazion Level(Build Settings),结果是一样的。

如果有帮助或解决方案,我将不胜感激!

最佳答案

你需要告诉 SQLite.swift medium通过使用可选的泛型 <String?>,列可以为空

改变

let medium = Expression<String>("medium")

let medium = Expression<String?>("medium")

关于ios - Swift:从 SQLite.swift 访问 NULL 值时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51855554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com