我正在做一个多线程的CoreBluetooth应用程序,其中iPhone作为中心扫描(基于UI交互)用于外围设备然后被连接和处理,导致应用程序的CoreData模型的各种更改用于存储持久性有关用户可以访问的不同外围设备状态的信息(无需在每次用户启动应用程序时都连接到它们)。
用户基本上通过UI请求连接到外围设备,然后启动异步工作线程,该线程将尝试在特定时间范围内(例如,几分钟)完成请求,否则报告故障/超时到UI。
一切正常,但我刚刚开始添加对后台执行的支持,因为很可能用户将启动异步工作线程,该线程将开始扫描BLE外设,以及然后锁上手机并放在口袋里,期待外围设备触手可及时工作。
然而,蓝牙方面的工作正常(外围设备被发现,连接和处理),但我突然得到CoreData例外;
CoreData: error: exception during newFetchedPKsForSourceID: I/O error for database at /var/mobile/Applications/8640B48D-8744-436A-A083-C39F63FBFB3F/Documents/Model.sqlite. SQLite error code:266, 'not an error' errno:1 with userInfo of {
NSFilePath = "/var/mobile/Applications/8640B48D-8744-436A-A083-C39F63FBFB3F/Documents/Model.sqlite";
NSPOSIXErrorDomain = 1;
NSSQLiteErrorDomain = 266;
}
CoreData: error: exception during newFetchedPKsForSourceID: authorization denied with userInfo of {
NSFilePath = "/var/mobile/Applications/8640B48D-8744-436A-A083-C39F63FBFB3F/Documents/Model.sqlite";
NSSQLiteErrorDomain = 23;
}
CoreData: error: exception during newFetchedPKsForSourceID: authorization denied with userInfo of {
NSFilePath = "/var/mobile/Applications/8640B48D-8744-436A-A083-C39F63FBFB3F/Documents/Model.sqlite";
NSSQLiteErrorDomain = 23;
}
CoreData: error: exception during newFetchedPKsForSourceID: authorization denied with userInfo of {
NSFilePath = "/var/mobile/Applications/8640B48D-8744-436A-A083-C39F63FBFB3F/Documents/Model.sqlite";
NSSQLiteErrorDomain = 23;
}
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'I/O error for database at /var/mobile/Applications/8640B48D-8744-436A-A083-C39F63FBFB3F/Documents/Model.sqlite. SQLite error code:266, 'not an error' errno:1'
所以,简而言之;一切都很好,只要我没有将应用程序置于后台执行模式,这对我来说表明正确设置了线程和同步/合并/ CoreData问题。但是当应用程序进入后台时会发生一些变化...
期待您的想法和想法,
/马库斯