在app的资源包swift中获取导入数据库的路径

时间:2015-06-27 03:03:55

标签: ios iphone sqlite swift resourcebundle

我已将使用数据库浏览器创建的数据库导入到我的swift中。现在我的问题是获取此数据库的路径。我也在应用程序中有一个FMDB包装器。

当我点击资源文件时,显示Full Path描述,我可以直接使用它作为路径,我查询数据库没有问题,但我不确定是否可以附带完整路径应用程序,因为它看起来像是专门通过这台计算机。我尝试使用NSBundle.mainBundle().pathForResource("MyDatabaseName", ofType: "sqlite"),但返回nil

基本问题:如何获取资源文件/数据库文件的路径以便我可以使用它?

感谢您的帮助!超级绝望!

1 个答案:

答案 0 :(得分:2)

问题是你正在使用Mac文件系统中的路径到sopurce版本,不要使用它,你需要设备文件系统(或模拟器文件系统)中的路径。

在设备上,它会看起来像一样

  

/private/var/mobile/Containers/Bundle/Application/953D9CCB-40A2-4587-9A75-531DCE3A2DD3/AppName.app/MyDatabaseName.sqlite

在模拟器上,它会看起来像这样

  

/Users/me/Library/Developer/CoreSimulator/Devices/56992263-5158-4AF5-B0CC-83E31982BB3E/data/Applications/560EEF55-2F15-4094-B20C-FF3B839AF7C2/AppName.app/MyDatabaseName.sqlite   应用程序文件系统中有一个文件路径。

以下是如何找到它:

  1. 在Xcode中打开您的项目
  2. 在Xcode菜单中:窗口:项目
  3. 在左栏中选择您的项目
  4. 在派生数据的右端,单击箭头
  5. Finder将打开Derived Data文件夹
  6. 双击应用程序的文件夹
  7. 将目录树导航到Build / Products / Debug-iphonesimulator
  8. 您将看到文件.app
  9. 这是应用包目录。
  10. 右键单击( control 单击),然后选择“显示包内容”
  11. 在此文件夹或子目录中查找数据库文件。
  12. Bundle路径是从此文件夹到db文件的路径。
  13. 创建数据库路径的示例代码:

    NSBundle *bundle = [NSBundle mainBundle];
    NSString *bundlePath = [bundle bundlePath];
    NSLog(@"bundlePath: %@", bundlePath);
    NSString *dbPath = [bundlePath stringByAppendingPathComponent:@"<path in bundle>"];
    NSLog(@"dbPath: %@", dbPath);
    

    还有其他方法可以找到路径(例如知道它在哪里是先验的)以及在应用程序中获取路径的其他方法,但不知道您的确切配置应该适合您。