0

我编写了一个用objective-c编写的应用程序A,它使用了我的另一个框架B,它也是用objective-c编写的。框架B有一些与数据库相关的操作。为了执行这些操作,我尝试使用 DBAccess ORM ( http://www.db-access.org/ )。

  1. B中,我创建了一个模型类,其基类是 DBObject。

    @interface SettingsModel : DBObject

  2. 应用程序A的AppDelegate委托 DBDelegate 协议,在“ -(BOOL) application: didFinishLaunchingWithOptions: ”中设置委托“ [DBAccess setDelegate:self];
  3. B中有一个EnvironmentManager类,它在其init方法中设置数据库名称。 [DBAccess openDatabaseNamed:@"dbname"];
  4. EnvironmentManager 的对象是从A的 ViewController 的viewDidLoad方法创建的。
  5. 现在我尝试从A的 viewController 方法中保存和检索数据。

当我在打开保存和检索方法的情况下运行应用程序A时,检索方法会为我提供保存的数据。但是,如果我评论保存数据部分并运行 A,则无法检索到以前的数据。

  1. 是否可以从另一个框架使用 DBAccess 框架?
  2. 如果可能的话,请帮助我从上面的描述中找出问题所在。

编辑:

我尝试了其他一些选项,在@Adrian_H 回答评论部分进行了讨论。我在AB中都使用了相同的路径

NSURL *applicationCachesDirectory = [[[NSFileManager defaultManager] URLsForDirectory:NSCachesDirectory inDomains:NSUserDomainMask] lastObject];
NSLog(@"%@",[applicationCachesDirectory path]);
4

2 回答 2

0

问题是,DBAccess 框架被启动了两次。一个在您自己的框架中启动,另一个在您的应用程序中启动。要解决这个问题:

  1. 选择项目 > 构建设置 > 打开链接器标志
  2. 从中删除 DBAccess 框架。同时删除 $(inherited)。
  3. 保存、清理并运行
于 2016-03-02T03:49:32.400 回答
0

听起来数据库的路径是未知的,您知道数据库文件是否正在创建吗?

如果它没有被创建,那么您将需要实现DBSettings方法来明确声明将保存 DB 文件的路径。(请参阅DBAccess 创建自定义 DBAccessSettings)。

由于路径无效,这是使用:memory:数据库时的经典行为。

也可能在某种程度上,在您的-(BOOL) 应用程序之前初始化 DBObject 类:didFinishLaunchingWithOptions:方法正在运行,因此您总是可以尝试先关闭数据库然后重新打开它。如果这是问题所在,我可以进行修复并发布框架的新版本,因为这不是预期的行为。

于 2016-01-25T08:52:08.617 回答