Reputation: 1961
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
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