如何解决Cordova插件目标C,FMDatabase tableExists参数运行错误
我有一个用于推送通知的客观C SDK,我正在尝试构建该sdk的框架,该框架可以作为插件添加到cordova应用程序中。有时,sdk会创建一个数据库并使用代码对其进行初始化:
///////////////////////////////////////////////////////////////////////////////
- (void)createDBIfNeeded
{
NSArray *libraryDirectories = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES);
NSString *libraryDirectory = libraryDirectories[0];
NSString *dbPath = [libraryDirectory stringByAppendingPathComponent:DB_NAME];
_db = [FMDatabase databaseWithPath:dbPath];
[_db setShouldCacheStatements:YES];
if ([_db open] == NO) {
WLLOG(@"Failed to open database");
}
}
///////////////////////////////////////////////////////////////////////////////
- (void)initDBIfNeeded
{
if ([_db tableExists:@"events"] == YES && [_db tableExists:@"netstats"] == YES) {
if ([_db columnExists:@"priority" inTableWithName:@"events"] == NO) {
[_db executeUpdate:@"ALTER TABLE events ADD COLUMN priority INTEGER"];
WL_FMDBLogError
}
[_db executeUpdate:@"VACUUM"];
WL_FMDBLogError
return;
}
if ([_db tableExists:@"events"] == NO) {
[_db executeUpdate:@"CREATE TABLE events (_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,type VARCHAR(255),time VARCHAR(255),data BLOB,priority INTEGER)"];
WL_FMDBLogError
} else if ([_db columnExists:@"priority" inTableWithName:@"events"] == NO) {
[_db executeUpdate:@"ALTER TABLE events ADD COLUMN priority INTEGER"];
WL_FMDBLogError
}
if ([_db tableExists:@"netstats"] == NO) {
[_db executeUpdate:@"CREATE TABLE netstats (_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,wifi INTEGER,wwan INTEGER,overall INTEGER,wifistart_timestamp INTEGER,wifiend_timestamp INTEGER,wifi_totaltime INTEGER,wifi_dirty INTEGER,wwanstart_timestamp INTEGER,wwanend_timestamp INTEGER,wwan_totaltime INTEGER,wwan_dirty INTEGER)"];
[_db executeUpdate:@"INSERT INTO netstats (_id,wifi,wwan,overall,wifi_totaltime,wifi_dirty,wwan_totaltime,wwan_dirty) VALUES (NULL,?,?)",@0,@0];
WL_FMDBLogError
}
if ([_db tableExists:@"pois"] == NO) {
[_db executeUpdate:@"CREATE TABLE pois (id INTEGER PRIMARY KEY NOT NULL UNIQUE,lat NUMERIC,lon NUMERIC,radius NUMERIC)"];
}
[_db makeFunctionNamed:@"DISTANCE" maximumArguments:4 withBlock:^(sqlite3_context *context,int argc,sqlite3_value **argv) {
distanceFunc(context,argc,argv);
}];
/*
* Enable custom settings for the database,to improve
* both behaviour and performance.
* http://sqlite.org/pragma.html
*/
[_db executeUpdate:@"PRAGMA auto_vacuum = FULL"];
WL_FMDBLogError
[_db executeUpdate:@"PRAGMA synchronous = NORMAL"];
WL_FMDBLogError
}
但是当第二行在第一行执行时,我得到了错误: 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[[FMDatabase tableExists:]:无法识别的选择器已发送到实例0x28295caa0'
有什么想法吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。