我在应用商店中有一个应用,并且正在使用日志服务来获取崩溃日志和相关的日志数据。我看到了间歇性崩溃(受影响的用户数量少,每个用户的崩溃数量少),但这让我感到困惑。
这些崩溃中发生的情况如下:
应用程序启动并初始化核心数据堆栈
应用程序尝试使用以下代码将 SQL 存储添加到 NSPersistentStoreCoordinator(
storeURL
有效):NSDictionary *options = @{ NSMigratePersistentStoresAutomaticallyOption : @(YES), NSInferMappingModelAutomaticallyOption : @(YES) }; sqlStore = [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error];
添加此商店时出现以下错误之一:
NS错误:
Domain=NSCocoaErrorDomain
Code=256 “操作无法完成。(Cocoa 错误 256。)”
UserInfo=0x1dd946a0 {NSUnderlyingException=授权被拒绝,NSSQLiteErrorDomain=23}
或者
NS错误:
Domain=NSCocoaErrorDomain
Code=256 “操作无法完成。(Cocoa 错误 256。)”
UserInfo=0xc6525d0 {NSUnderlyingException=磁盘 I/O 错误,NSSQLiteErrorDomain=10}
在这种情况下,应用程序将崩溃,因为应用程序需要 SQL 存储才能运行。我可以尝试通过尝试新的 storeURL 来优雅地处理此失败,但我不希望用户丢失现有数据。此外,我从未亲自重现过此问题,并且基于受影响的用户数量和崩溃日志的数量较少,我认为这是一个影响较小的问题,并且不会在后续应用启动时再次出现。
我希望有一位 Core Data 大师就如何调试和预防/处理这些情况提出一些建议。我的核心数据堆栈初始化代码直接来自 xcode 项目生成器,并且我已经排除了任何并发问题,因为持久存储协调器仅初始化一次(在启动时)并且此错误发生在此初始化中。
如果相关,很高兴提供更多代码/信息。
谢谢!