“无法将类型'__ NSCFString'(0x103c93c50)的值转换为'NSNumber'(0x103535b88)”错误

时间:2015-09-16 06:48:13

标签: ios swift sqlite

我创建了一个SQLite表,其中包含行id integer PRIMARY KEY。我使用this tutorialSQLite与我的应用集成。我正在尝试将其添加到array Ints。这是我的代码:

let all = "select id from \(self.tableName)"
let fullArray = self.dbManager.loadDataFromDB(all)

for currentObject in fullArray {  
    println(currentObject[0])
    println(_stdlib_getDemangledTypeName(currentObject[0]))
    self.tableViewData.append(currentObject[0] as! Int) //tableViewData is an array of Ints
}

println陈述的结果:

  

2   
Swift.ImplicitlyUnwrappedOptional

当我运行应用程序时,我在代码的最后一行收到以下错误。

  

无法将类型'__NSCFString'(0x103c93c50)的值转换为   'NSNumber'(0x103535b88)。

我做错了什么,我该如何解决?

3 个答案:

答案 0 :(得分:0)

尝试:

self.tableViewData.append(currentObject[0].toInt()) 

答案 1 :(得分:0)

你确定数组中的数据都是Ints吗?我使用Flickr API遇到了类似的问题,因为print()语句显示它返回了Int值。

然而它实际上是返回String值。首先尝试转换为String,然后根据需要使用Int()转换为整数。

答案 2 :(得分:0)

请注意教程代码中的以下几行:

// Convert the column data to text (characters).
char *dbDataAsChars = (char *)sqlite3_column_text(compiledStatement, i);

所有结果都转换为字符串,这意味着数据库类型integer未保留在结果中,您必须使用以下内容:

for currentObject in fullArray as! [String] {  
    // Int(currentObject[0])! in Swift 2
    self.tableViewData.append(currentObject[0].toInt()) 
}