【问题标题】:Share sqlite database between app and extension在应用程序和扩展程序之间共享 sqlite 数据库
【发布时间】:2015-05-10 20:05:20
【问题描述】:

我已经按照this 教程添加了我的数据库。我确实针对我的应用程序和我的扩展程序。从我的应用程序中,我可以选择、插入、删除和更新数据库。我希望我的应用程序和扩展程序共享同一个数据库。所以我在我的应用程序中添加信息,然后在扩展程序中显示该信息。

由于它现在可以工作(我已经测试过),应用程序有一个数据库实例,而扩展程序有一个实例。我只添加了一个分贝。任何人都知道为什么我有两个数据库实例以及为什么我无法访问从扩展程序中的应用添加的数据?

【问题讨论】:

  • sqlite 没有共享服务器。每个实例都需要自行设置访问权限。
  • @ThomasKilian 我不完全确定我理解了,但两者都有自己的访问权限,但是否可以在它们之间共享数据库信息?如果没有,如果您想将信息存储在手机中,是否只有 NSUserdefaults 可以使用?
  • 我不是 iOS 开发人员(只是 OSX),所以不能说太多。但只要访问同一个文件,就可以共享里面的信息。

标签: database sqlite ios8-extension


【解决方案1】:

应用程序及其扩展程序是独立的进程,因此 iOS 沙盒通常意味着它们不能接触彼此的文件。您引用的页面似乎没有以任何方式解决此问题。

如果您想在您的应用程序和扩展程序中使用相同的 SQLite 文件,您需要为两者配置“应用程序组”权利。这设置了一个他们都可以访问的新目录,然后你把你的 SQLite 文件放在那里。您可以在NSFileManager 上使用containerURLForSecurityApplicationGroupIdentifier: 方法找到此目录。

我不清楚您使用的 GitHub 项目是否会使用应用程序组。但是,没有其他方法可以共享您的 SQLite 文件。如果该项目不使用应用组,您需要修复它以使其使用或停止使用它。

【讨论】:

  • 我应该放置我的自定义 sqlite 文件吗?不是很懂。
  • 您调用containerURLForSecurityApplicationGroupIdentifier: 来获取目录的路径。您将 SQLite 文件放在该目录中。
  • 我现在有了路径,但找不到目录。是否有我将数据库放入的物理目录,还是我应该通过代码添加数据库?
  • 您需要在代码中使用该目录路径。您可以从代码那里创建文件,也可以将文件复制到目录中。它不能作为应用安装过程的一部分使用,因此代码需要以一种或另一种方式处理它。
猜你喜欢
  • 1970-01-01
  • 2019-03-29
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
相关资源
最近更新 更多