ios:Sqlite和fmdb插入在关闭计算机时不会在模拟器上持久化

ios:Sqlite和fmdb插入在关闭计算机时不会在模拟器上持久化,ios,sqlite,persistence,fmdb,Ios,Sqlite,Persistence,Fmdb,我正在使用fmdb()将数据插入sqlite。我直接与sqlite交谈,而不是使用核心数据,因为我觉得它在查询中给了我更多的灵活性,而且我擅长SQL,所以对我来说很容易 当使用模拟器在XCode5中运行时,我注意到的问题是,当我关闭Mac,然后再打开它时,插入的SQLite数据都不会被持久化。桌子是空的。除了我的Mac之外,我没有苹果设备,所以到目前为止我还无法在实际设备上测试,所以这可能只是一个模拟器,如果是这样的话,我可以接受 以下是我的典型插页: -(BOOL)insertLocat

我正在使用fmdb()将数据插入sqlite。我直接与sqlite交谈,而不是使用核心数据,因为我觉得它在查询中给了我更多的灵活性,而且我擅长SQL,所以对我来说很容易

当使用模拟器在XCode5中运行时,我注意到的问题是,当我关闭Mac,然后再打开它时,插入的SQLite数据都不会被持久化。桌子是空的。除了我的Mac之外,我没有苹果设备,所以到目前为止我还无法在实际设备上测试,所以这可能只是一个模拟器,如果是这样的话,我可以接受

以下是我的典型插页:

   -(BOOL)insertLocation:(BTRLocation *)location {
NSMutableDictionary *dictionaryArgs = [NSMutableDictionary dictionary];
[dictionaryArgs setObject:location.address forKey:@"columnA"];
[dictionaryArgs setObject:location.name forKey:@"columnB"];

return [self.db executeUpdate:@"insert into locs (columnA, columnB) values (:columnA, :columnB)" withParameterDictionary:dictionaryArgs];

}
我的查询似乎没有任何问题,因为它确实有效。即使我通过点击XCode中的停止按钮关闭应用程序,然后重新启动它,所有数据都会被持久化。它只是无法通过电脑关机。我觉得这有点奇怪,因为NSUserDefaults似乎通过计算机关闭而持久化

帮忙

编辑: 我发现了一些额外的信息: 似乎在重启时不再存在的不仅仅是表中的数据,还有表本身。我总是在应用程序启动时这样做:

  FMResultSet *rs = [self.db executeQuery:@"select DISTINCT tbl_name from sqlite_master where tbl_name = ?", table];
[rs next];
BOOL errors = NO;
if([rs hasAnotherRow]) {
    // table exists - I think -> So here we would do nothing
    NSLog(@"locs table existed");
} else {
    NSLog(@"locs table does not exist");

它总是会点击if(locs表已存在),除非在计算机重新启动后第一次启动应用程序。

听起来像是在/tmp中存储数据。您不只是复制并粘贴FMDB示例代码而不查看它,是吗?:)

在哪个文件夹中创建实际的数据库文件?/tmp/myapp\u mydatabase.db。我猜tmp不是它的位置?不,那个文件夹是在操作系统的突发奇想下被删除的。正如你可能猜到的,它是用于临时文件的。那么,推荐的路径是什么呢?我要说的是,不,我确实有数百行使用我自己编写的fmdb的代码,但是,当我对fmdb足够熟悉时,我肯定会错过一些东西,我可以将其用于我的目的。是的,我将数据存储在/tmp/myapp_locations.db中。这不是我应该去的地方吗?据我所知,我上面示例代码中的代码甚至不在fmdb示例代码中……您可能希望将数据库存储在某种文档或应用程序支持文件夹中/tmp将在您重新启动时被清除。