将可能为null的值插入iOS的sqlite数据库中

问题描述 投票:0回答:4

我有一个名为Content的类,其URL属性可为空(URL:String?)。我想使用FMDB将这个URL属性存储在我的sqlite数据库中,但是Xcode抱怨我需要用!

来打开可选属性。

但是问题是当我执行content.URL时!它崩溃,因为它为零。

 success = db.executeUpdate("INSERT INTO CONTENT(ID, Icon, Title, Description, URL, IsActive) VALUES(?,?,?,?,?,?,?,?,?)", withArgumentsInArray: [content.ID, content.icon, content.title, content.description, content.URL!, content.isActive])

如何在有值和无值的情况下都成功插入URL?

谢谢!

ios swift sqlite swift2 fmdb
4个回答
1
投票

我在这种情况下使用的一种方法是创建类扩展。

例如:

 class func databaseSafeObject(object: AnyObject?) -> AnyObject {
    if let safeObject: AnyObject = object{
        return safeObject;
    }

    return NSNull();
}

然后您可以使用:

NSObject.databaseSafeObject(content.URL);

获得可以直接插入数据库的内容。


0
投票

所以这最终对我有用,尽管这似乎是必不可少的:

(content.URL == nil ? NSNull() : content.URL!)

0
投票

[存在用于SQLite的Swift包装器,它可能比fmdb更适合,后者可以在Swift中运行,但不使用Swift功能,例如可选功能(在此处可能会错过),类型安全性和错误处理。例如,请参阅我的GRDB.swift http://github.com/groue/GRDB.swift,该文件受ccgus / fmdb的影响很大。


0
投票

AnyObject类型不适用于IntDouble类型的变量,因此我创建了一个类似的函数来处理可选的Swift变量。

private func getOptionalOrNull(_ possibleValue:Any?)->Any {
  if let theValue = possibleValue {
    return theValue
  } else {
    return NSNull()
  }
} 
© www.soinside.com 2019 - 2024. All rights reserved.