我在设备上运行时遇到访问数据库文件的问题.我怎么能得到那个文件?在模拟器上运行应用程序时访问文件没有问题.就像我在模拟器上运行应用程序时,DB文件位于:
/Users/Nitish/Library/Application Support/iPhone Simulator/4.3/Applications/1B787527-0608-4BC1-8022-DFDB3CC35F66/mysqlite.sqlite
Run Code Online (Sandbox Code Playgroud)
当应用程序在设备上运行时,我在哪里可以找到DB文件?
Shi*_*mon 20
阅读所有评论和答案,我认为没有人真正回答作者的简单问题:
如何在实际设备上运行时访问sqlite数据库文件(这不是作为作者指示的iPhone模拟器中的问题)
这是我做的:
(一次!)确保所有隐藏文件在Mac上都可见:在终端窗口中运行:默认写入com.apple.Finder AppleShowAllFiles YES
在Xcode中,打开管理器 - >设备,找到你的iPhone,并从他们在Applications文件夹中找到你的应用程序.
在底部单击下载并将应用程序下载到桌面(任何地方)
打开Finder,导航到下载的文件,右键单击它并选择Show Package Contents.视图将更改为标准查找程序视图,并在该应用程序中打开文件.
转到Documents文件夹,找到*.sqlite文件,右键单击它并选择Open With - > Other
选择SQLite数据库浏览器(http://sqlitebrowser.sourceforge.net)并通过数据库浏览器欣赏数据库视图.
一旦完成一次,运行整个过程只需不到一分钟.
Chr*_*orr 11
我使用此方法获取数据库的URL:
+ (NSURL *)storeURL
{
if ([self isExecutingUnitTests])
{
NSString *directory = [[NSFileManager defaultManager] currentDirectoryPath];
return [NSURL fileURLWithPath:[directory stringByAppendingPathComponent:@"UnitTests/test-database.sqlite"]];
}
else
{
return [NSURL fileURLWithPath:[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/database.sqlite"]];
}
}
Run Code Online (Sandbox Code Playgroud)
它在模拟器上,设备上甚至在执行单元测试时都能正常工作!UnitTests和Documents都应该存在于.xcodeproj的级别上.
正如其他人所说,您的数据库不应该位于应用程序的根文件夹中.如果要从捆绑包中加载静态数据库(即通过在xCode中添加数据库而预加载的数据库),则必须通过捆绑包访问它.
NSString *path = [[NSBundle mainBundle] pathForResource:@"mysqlite" ofType:@"sqlite"];
Run Code Online (Sandbox Code Playgroud)
如果要从文档目录访问该文件(即它已被修改或保存).
NSString *fileName = @"mysqlite.sqlite";
NSString *directoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *path = [directoryPath stringByAppendingPathComponent:fileName];
Run Code Online (Sandbox Code Playgroud)