miken.mkndev
miken.mkndev

Reputation: 1961

CoreData Crash after App Update

I have a very annoying issue. I have a "CoreData" app that is currently in production and everything works fine. I have an update for the app, but whenever the update is installed over the original app the app crashes right on the line of code below.

[_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]

The error I receive is "Can't use fetch request with fetched property description (entity model mismatch).".

There have been changes to the CoreData model, but I created a new version of the model for my changes, so it should merge the changes into the new model. This is the same process I have done a hundred times, and always works. Except for this time.

The only difference I can think of that could cause this issue is that I removed some old Fetch Requests from the CoreData model, but once again this was done in the updated model version and not the original model.

Do you all have any idea what could cause this? As I mentioned I did update the CoreData model version and selected it as my current model for the app. Also, what is very strange is the crash only happens the first time you run the app after the update. After the crash occurs I can re-launch the app and everything works fine.

Thanks!

!** EDIT **!

If this helps here is my call stack.

Last Exception Backtrace:
0   CoreFoundation                  0x32ac029e __exceptionPreprocess + 158
1   libobjc.A.dylib                 0x3a95697a objc_exception_throw + 26
2   CoreFoundation                  0x32ac01c0 +[NSException raise:format:] + 100
3   CoreData                        0x328a2678 -[NSFetchedPropertyDescription setFetchRequest:] + 164
4   CoreData                        0x328a2788 -[NSFetchedPropertyDescription _createCachesAndOptimizeState] + 76
5   CoreData                        0x32899b0a -[NSEntityDescription(_NSInternalMethods) _createCachesAndOptimizeState] + 1238
6   CoreData                        0x328d18a6 -[NSManagedObjectModel(_NSInternalMethods) _createCachesAndOptimizeState] + 702
7   CoreData                        0x3284e534 -[NSManagedObjectModel(_NSInternalMethods) _setIsEditable:optimizationStyle:] + 272
8   CoreData                        0x3284e2f2 -[NSPersistentStoreCoordinator initWithManagedObjectModel:] + 302
9   CoreData                        0x32939c4c -[NSSQLiteInPlaceMigrationManager migrateStoreFromURL:type:options:withMappingModel:toDestinationURL:destinationType:destinationOptions:error:] + 692
10  CoreData                        0x328da838 -[NSMigrationManager migrateStoreFromURL:type:options:withMappingModel:toDestinationURL:destinationType:destinationOptions:error:] + 512
11  CoreData                        0x3292bc54 -[NSStoreMigrationPolicy(InternalMethods) migrateStoreAtURL:toURL:storeType:options:withManager:error:] + 276
12  CoreData                        0x3292afa8 -[NSStoreMigrationPolicy migrateStoreAtURL:withManager:metadata:options:error:] + 84
13  CoreData                        0x3292c4b2 -[NSStoreMigrationPolicy(InternalMethods) _gatherDataAndPerformMigration:] + 1930
14  CoreData                        0x3284f384 -[NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error:] + 3340
15  MSM iPad                        0x001cb4c2 -[VS_CoreDataManager persistentStoreCoordinator] + 466
16  MSM iPad                        0x001cbb12 -[VS_CoreDataManager initializeCoreDataWithProjectName:] + 94
17  MSM iPad                        0x000b6678 -[AppDelegate application:didFinishLaunchingWithOptions:] (AppDelegate.m:117)
18  UIKit                           0x34928ad4 -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 248
19  UIKit                           0x3492865e -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1186
20  UIKit                           0x34920846 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 694
21  UIKit                           0x348c8c34 -[UIApplication handleEvent:withNewEvent:] + 1000
22  UIKit                           0x348c86c8 -[UIApplication sendEvent:] + 68
23  UIKit                           0x348c8116 _UIApplicationHandleEvent + 6150
24  GraphicsServices                0x365bc59e _PurpleEventCallback + 586
25  GraphicsServices                0x365bc1ce PurpleEventCallback + 30
26  CoreFoundation                  0x32a9516e __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 30
27  CoreFoundation                  0x32a95112 __CFRunLoopDoSource1 + 134
28  CoreFoundation                  0x32a93f94 __CFRunLoopRun + 1380
29  CoreFoundation                  0x32a06eb8 CFRunLoopRunSpecific + 352
30  CoreFoundation                  0x32a06d44 CFRunLoopRunInMode + 100
31  UIKit                           0x3491f480 -[UIApplication _run] + 664
32  UIKit                           0x3491c2fc UIApplicationMain + 1116
33  MSM iPad                        0x000b6432 main (main.m:17)
34  libdyld.dylib                   0x3ad8db1c start + 0

Upvotes: 2

Views: 1522

Answers (1)

Linda MacPhee-Cobb
Linda MacPhee-Cobb

Reputation: 7866

I've found I must delete the cache after app updates:

Either don't cache fetched items

 NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];

or delete the cache upon an update

[NSFetchedResultsController deleteCacheWithName:@"Master"];

Upvotes: 1

Related Questions