【问题标题】:iOS Dropbox Datastore Crash after App Resumes应用恢复后 iOS Dropbox 数据存储崩溃
【发布时间】:2014-12-18 06:05:28
【问题描述】:

我会监听我的应用何时恢复工作(用户返回应用),并在发生这种情况时触发同步:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
  NSLog(@"App resumed...");
  //Fire a sync
  [[PPDropbox shared] sync];
}

我收到了一些在此事件之后发生的崩溃报告,并且尝试同步时显示:

Fatal Exception: DBException
DBException: SHUTDOWN: sqlite_util.cpp:208: SqliteConnectionBase has been closed {-[DBDatastore sync:]}

我的sync 方法目前看起来像这样:

-(void)sync
{
  if(self.datastore){
    [self.datastore sync:nil];
  }
}

在我同步时是否应该进行某种检查以确保 SQLite 连接仍然可用?

Dropbox 数据存储版本 3.1.1,iOS 8.1

【问题讨论】:

  • 您的应用程序何时关闭 DBDatastoreManager?当应用程序尝试调用同步时,它是否可能被关闭?如果是这样,那可能会导致这种情况。 (另外,如果 DBDatastore 已关闭,则可能。)不幸的是,此错误消息不是很清楚,但日志中可能有更多信息,例如,在“Terminating app due to...”之后。你有那部分吗?
  • 我关闭了- (void)applicationWillTerminate:(UIApplication *)application 中的数据存储。我应该用别的东西关闭它吗?这是完整的崩溃日志:d.pr/n/DV26
  • 我认为 applicationWillTerminate 应该没问题,但是 DBDatastoreManager 呢?做/什么时候关闭它?我之所以问,是因为我知道尝试从已关闭的 DBDatastoreManager 中的 DBDatastore 同步数据存储时可能会发生此错误。不幸的是,堆栈跟踪没有提供更多信息。你能重现这个吗?
  • 我不会在任何地方关闭DBDatastoreManager。我也应该在applicationWillTerminate 中这样做吗?
  • 我还不能复制它,不。我只是看到我的应用用户的崩溃日志。

标签: ios dropbox-api


【解决方案1】:

我在我的应用程序中遇到了同样的问题。 我的场景是这样的:我取消链接帐户并关闭数据存储。 然后我尝试再次链接 Dropbox。

我的单例实例尝试在 - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url 方法中进行同步,然后它崩溃并出现问题中提到的相同错误。

我的问题是我尝试同步时数据存储已关闭(我仅在单例初始化时设置数据存储)。

所以我所做的只是在调用同步之前设置数据存储,例如 self.datastore = [[DBDatastoreManager sharedManager] openDefaultDatastore:nil];

【讨论】:

  • 如果数据存储已经打开,运行openDefaultDatastore 是否有任何问题?或者如果它已经打开,它会忽略它吗?我问是因为我想尝试您的解决方案,但我不想引入重新打开开放数据存储的新问题。
  • @CliftonLabrum 我在我的应用程序中使用了上述方法并多次登录/注销,但没有发现任何可疑之处。
【解决方案2】:

我推测你的问题并不是你失去了与 SQLite 的连接,而是有其他问题破坏了使用 SQLLite 的内存。

您在测试和调试方面有多熟练?尝试执行诸如启用 Guard Malloc 之类的操作,并使用 assert 来验证方法的参数(如果您有指针,是否允许为 NULL?)。

我关于断言的文章可能会有所帮助:assert() is the Documentation that Keeps on Testing

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多