我想最好的办法就是在结果中显示我正在做的代码:
这有效:
if (sqlite3_column_text(statement, 0)) {
[marker setObject:[NSNumber numberWithInt: sqlite3_column_int(statement, 0)] forKey:@"id"];
}
对于if语句,它总是返回false:
if (sqlite3_column_int(statement, 0)) {
[marker setObject:[NSNumber numberWithInt: sqlite3_column_int(statement, 0)] forKey:@"id"];
}
这会为列返回错误的结果:
if (sqlite3_column_text(statement, 0)) {
[marker setObject:[NSNumber numberWithInt: sqlite3_column_text(statement, 0)] forKey:@"id"];
}
有什么想法吗?
答案 0 :(得分:1)
在尝试访问列的值之前,您应该获得返回的列数。
int count = sqlite3_column_count (statement);
调用sqlite3_column_int()时,它返回列的整数值。如果该值为零怎么办?您无法区分该列的有效零结果和空值之间的区别。您可以使用
测试列是否为空sqlite3_column_type () == SQLITE_NULL;
此外,Obj-C不会自动转换不同的类型,因此numberWithInt: sqlite3_column_text
当然会产生垃圾结果。 sqlite3_column_text()返回的是指向C字符串的指针,该字符串是字符串所在的内存中的地址。我猜你在期待它以某种方式将字符串转换为整数?这不会发生在C.