【问题标题】:unexpectedly found nil while unwrapping an Optional value while reading from DS with fromCString使用 fromCString 从 DS 读取时解包 Optional 值时意外发现 nil
【发布时间】:2016-05-15 07:27:33
【问题描述】:

我正在从 dbtable 读取数据,但在表的特定位置出现错误。我的 sql 没问题,因为我已经可以从同一个表中读取,但是在特定行我得到一个错误,我想知道如何处理这个错误。我不是在寻找解决我的数据库问题的解决方案,我只是在寻找处理错误,所以它不会崩溃。

我有以下代码:

let unsafepointer=UnsafePointer<CChar>(sqlite3_column_text(statement, 2));
if unsafepointer != nil {
    sText=String.fromCString(unsafepointer)! // <<<<<< ERROR
} else {
   sText="unsafe text pointer is nil !";
}

我收到一个错误:

“致命错误:在展开可选值时意外发现 nil”

在标有&lt;&lt;&lt;&lt;&lt;&lt; ERROR的行。

不安全指针的值不是nil

pointerValue : 2068355072

如何处理此错误,以免我的应用崩溃?

【问题讨论】:

    标签: swift sqlite null unsafe-pointers


    【解决方案1】:

    另一种可能的解决方案是:

    let unsafepointer=UnsafePointer<CChar>(sqlite3_column_text(statement, 2));
    var sText = "unsafe text pointer is nil !";
    if unsafepointer != nil{
        if let text = String.fromCString(unsafepointer) as String?{
            sText = text;
        }    
    }
    

    【讨论】:

    • 我在 if 语句中遇到语法错误“条件绑定的初始化程序必须具有可选类型,而不是 'UnsafePointer' (aka 'UnsafePointer')”
    • 非常感谢。很有帮助。
    【解决方案2】:
    let statementValue = sqlite3_column_text(statement, 2)
    var sText = withUnsafeMutablePointer(&statementValue) {UnsafeMutablePointer<Void>($0)}
    

    【讨论】:

    • 我不明白。我仍然有同样的问题,在 sText 中,没有文本。 sText 是一个 UnsafeMutablePointer。如何处理错误?
    • 现在呢?你确定你有一个有效的语句值吗?
    • 我在“if let ...”语句中遇到语法错误:“条件绑定的初始化程序必须具有可选类型,而不是 'UnsafePointer'”。我在 Xcode 7.2
    • 感谢您的帮助。我可以使用“ciccioska”中的示例。
    • 您能否编辑您提出的答案以扩展其作用以及它如何解决 OP?
    【解决方案3】:
    if sqlite3_column_text(statement, 2) != nil {                     
    print("do something")
    } else {
    YourString = ""
    }
    

    【讨论】:

    • 嗨 Miguel - 你能解释一下为什么这个答案比公认的答案更好吗?
    猜你喜欢
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多