在 sqlite 语句中绑定 NSInteger

binding NSInteger in sqlite statement

以下语句引发警告:Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int'

sqlite3_bind_int(statement, 1, obj.extId);

这里obj.extId是NSInteger类型。我不能将其保留为 int,因为 extID 可能包含很长的数字。

如何删除此警告?我需要做什么铸造?我可以使用 sqlite3_bind_int64 而不是 sqlite3_bind_int 吗?

投射到 int:

sqlite3_bind_int(statement, 1, (int)obj.extId);

或使用int64绑定函数:

sqlite3_bind_int64(statement, 1, obj.extId);

问题是,如果您同时为 32 位和 64 位构建,那么 NSInteger 的大小将根据您构建的内容而改变。我认为第一种方法是最好的,如果你知道整数不会超过 32 位,如果你知道它可以超过 32 位,那么使用 int64_t 而不是 NSInteger 并使用第二种方法.