There seems to be an issue with core data. The app is getting crash while getting a persistent coordinator for iOS 10 mobile.
The crash is:-
Fatal error: Unresolved error Error Domain=NSCocoaErrorDomain Code=259 "The file couldn’t be opened because it isn’t in the correct format." UserInfo={NSUnderlyingException=File at path does not appear to be a SQLite database: /var/mobile/Containers/Data/Application/35630A3E-0697-4244-929F-90F35DD1167E/Library/Application Support/Quickride.sqlite, NSSQLiteErrorDomain=26}
I have tried finding a solution related to core data corruption issue. But there was no solution. I guess this issue with persistent coordinator getting corrupted.
@available(iOS 10.0, *)
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "Quickride")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error {
fatalError("Unresolved error \(error)")
}
})
return container
}()
lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
// The persistent store coordinator for the application. This implementation creates and returns a coordinator, having added the store for the application to it. This property is optional since there are legitimate error conditions that could cause the creation of the store to fail.
// Create the coordinator and store
let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
let url = self.applicationDocumentsDirectory.appendingPathComponent("SingleViewCoreData.sqlite")
AppDelegate.getAppDelegate().log.debug("Url : \(String(describing: url))")
var failureReason = "There was an error creating or loading the application's saved data."
let mOptions = [NSMigratePersistentStoresAutomaticallyOption: true,
NSInferMappingModelAutomaticallyOption: false]
do {
try coordinator.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: url, options: mOptions)
} catch {
// Report any error we got.
var dict = [String: AnyObject]()
dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data" as AnyObject
dict[NSLocalizedFailureReasonErrorKey] = failureReason as AnyObject
let wrappedError = NSError(domain: "QuickRide domain", code: 9999, userInfo: dict)
// Replace this with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
self.log.debug("Unresolved error \(wrappedError), \(wrappedError.userInfo)")
}
return coordinator
}()
Here is the crash report of the crash:-
Crashed: com.apple.main-thread
0 libswiftCore.dylib 0x21b4a4c specialized _assertionFailure(_:_:file:line:flags:) + 27869
1 libswiftCore.dylib 0x204f693 _assertionFailure(_:_:file:line:flags:) + 113116
2 Quickride 0x3e8795 closure #1 in closure #1 in AppDelegate.persistentContainer.getter (AppDelegate.swift:633)
3 Quickride 0x6ff2bd thunk for @escaping @callee_guaranteed (@guaranteed NSPersistentStoreDescription, @guaranteed Error?) -> () (<compiler-generated>)
4 CoreData 0x1ea637c1 -[NSPersistentStoreCoordinator addPersistentStoreWithDescription:completionHandler:] + 406
5 CoreData 0x1eb05e4b -[NSPersistentContainer loadPersistentStoresWithCompletionHandler:] + 398
6 Quickride 0x3e7d13 AppDelegate.persistentContainer.getter (<compiler-generated>)
7 Quickride 0x146b4f specialized static UserCoreDataHelper.getUserObject() (CoreDataHelper.swift:17)
8 Quickride 0x4c2487 AppStartupHandler.performSessionInitializationTask() (<compiler-generated>)
9 Quickride 0x3e6ee5 AppDelegate.handleUserNotification(newUserNotification:) (<compiler-generated>)
10 Quickride 0x3e6a1b AppDelegate.processRemoteNotification(userInfo:) (<compiler-generated>)
11 Quickride 0x3ee493 specialized AppDelegate.application(_:didReceiveRemoteNotification:fetchCompletionHandler:) (AppDelegate.swift:394)
12 Quickride 0x3e6717 @objc AppDelegate.application(_:didReceiveRemoteNotification:fetchCompletionHandler:) (<compiler-generated>)
13 Quickride 0x7fe83d FCM_swizzle_appDidReceiveRemoteNotificationWithHandler (FIRMessagingRemoteNotificationsProxy.m:504)
14 UIKit 0x21ed2927 -[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:] + 5066
15 UIKit 0x21ebf001 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 5168
16 UIKit 0x21ec3c1d -[UIApplication _runWithMainScene:transitionContext:completion:] + 1640
17 UIKit 0x21ed67c5 __84-[UIApplication _handleApplicationActivationWithScene:transitionContext:completion:]_block_invoke.3149 + 40
18 UIKit 0x21ec135b -[UIApplication workspaceDidEndTransaction:] + 142
19 FrontBoardServices 0x1e2fcc13 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 18
20 FrontBoardServices 0x1e2fcacd -[FBSSerialQueue _performNext] + 220
21 FrontBoardServices 0x1e2fcdb7 -[FBSSerialQueue _performNextFromRunLoopSource] + 44
22 CoreFoundation 0x1c9d7fdd __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 12
23 CoreFoundation 0x1c9d7b05 __CFRunLoopDoSources0 + 424
24 CoreFoundation 0x1c9d5f51 __CFRunLoopRun + 1160
25 CoreFoundation 0x1c9291af CFRunLoopRunSpecific + 470
26 CoreFoundation 0x1c928fd1 CFRunLoopRunInMode + 104
27 UIKit 0x21cb6e2d -[UIApplication _run] + 660
28 UIKit 0x21cb1a53 UIApplicationMain + 150
29 Quickride 0x7ef45 main (A ppDelegate.swift:31)
30 libdyld.dylib 0x1c1164eb start + 2
Any idea how to solve this?
To be precise with the terminology, it is not the persistent store coordinator but the persistent store file which is corrupt. To confirm this, run Terminal.app and try to open with the sqlite3 command line tool:
sqlite3 /var/mobile/Containers/Data/Application/35630A3E-0697-4244-929F-90F35DD1167E/Library/Application Support/Quickride.sqlite
If you get the same error, you've got a corrupt file. If you are developing an app, trash the file and move on. If the file contains data that you actually need, hope you've got a prior backup that works.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With