我已经创建了 sqlite 数据库。
我在我的应用程序中添加了这个 sqlite 文件,但是当我在模拟器中运行应用程序并检查文档目录中的 sqlite 文件路径时,我在文档目录的路径上打开了 sqlite 文件,当时我创建的表没有出现。
在本地副本中,我也可以在我的项目文件夹中看到表格我可以看到表格但是在模拟器的路径上我看不到表格
所以在我的控制台中它向我显示了错误:
Sqlite Prepare 失败:没有这样的表
我已经创建了 sqlite 数据库。
我在我的应用程序中添加了这个 sqlite 文件,但是当我在模拟器中运行应用程序并检查文档目录中的 sqlite 文件路径时,我在文档目录的路径上打开了 sqlite 文件,当时我创建的表没有出现。
在本地副本中,我也可以在我的项目文件夹中看到表格我可以看到表格但是在模拟器的路径上我看不到表格
所以在我的控制台中它向我显示了错误:
Sqlite Prepare 失败:没有这样的表
我在下面的回复假设您的数据库格式正确且功能正常。您可以通过命令行轻松测试。在我自己的应用程序中,所有标签栏控制器应用程序,我将数据库访问代码放在应用程序委托中。应用委托中的两个方法如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions (NSDictionary *)launchOptions {
[self createEditableCopyOfDatabaseIfNeeded];
[self.window setRootViewController:rootController];
[window makeKeyAndVisible];
return YES;
}
还:
- (void)createEditableCopyOfDatabaseIfNeeded {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSString *dbPath =[documentsDir stringByAppendingPathComponent:@"dbName.sqlite"];
BOOL success = [fileManager fileExistsAtPath:dbPath];
if(!success)
{
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"dbName.sqlite"];
success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];
if (!success)
NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
}
}
如果您已经尝试了所有方法并且仍然收到此错误.. 即使您尝试重置 iOS 模拟器。尝试在iOS模拟器中安装应用程序,然后手动卸载(选择主页并长选应用程序图标并删除它),然后重置模拟器。
我不知道为什么,但我尝试了其他所有方法,花了几个小时把头撞在墙上。然后这奏效了。
您可以将 sqlite 文件放在您的 xcode 项目中并像这样找到它:
NSString *pathToSQL = [[NSBundle mainBundle] pathForResource:@"sqlname" ofType:@"sql"];
确保 sql 文件的“Target Membership”设置正确,以便项目“看到”它:
1)点击Xcode左侧窗格中的sql文件
2)打开/显示文件检查器(右窗格)
3)在“目标会员”下,确保“检查”是“检查”
就是这样。希望,这就是你要找的。任何问题都可以回复我。