2013-09-04 4 views
2

У меня очень неприятная проблема. У меня есть приложение «CoreData», которое в настоящее время работает, и все работает нормально. У меня есть обновление для приложения, но всякий раз, когда обновление устанавливается поверх исходного приложения, приложение выходит из строя прямо в строке кода ниже.Ошибка CoreData после обновления приложения

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

Ошибка, которую я получаю, это «Невозможно использовать запрос выборки с описанием свойств (несоответствие модели объекта)».

Были изменения в модели CoreData, но я создал новую версию модели для своих изменений, поэтому она должна объединить изменения в новую модель. Это тот же самый процесс, который я делал сто раз, и всегда работает. За исключением этого времени.

Единственное отличие, которое я могу придумать, может привести к тому, что я удалил некоторые старые запросы на выборку из модели CoreData, но это снова было сделано в обновленной версии модели, а не в исходной модели.

Вы все понимаете, что может вызвать это? Как я уже упоминал, я обновил версию модели CoreData и выбрал ее в качестве моей текущей модели для приложения. Кроме того, очень странно, что авария происходит только при первом запуске приложения после обновления. После сбоя я могу перезапустить приложение, и все работает нормально.

Спасибо!

! ** EDIT **!

Если это помогает, это мой стек вызовов.

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 
+0

Не похоже на проблему миграции. Я думаю, что ваша новая модель просто сломана. В сообщении говорится, что у вас есть запрос на выборку в модели, в которой используется свойство, полученное от имени, и что это не нравится. Более подробная информация о запросах выборки в файле модели может помочь. –

+0

Вы пытались установить параметры 'NSInferMappingModelAutomaticallyOption' и' NSMigratePersistentStoresAutomaticallyOption' при добавлении постоянного хранилища? – Mundi

+0

Да, я установил эти два параметра при добавлении постоянного хранилища. Единственное, что я сделал между версиями, - удалить некоторые извлеченные свойства, которые я больше не использовал. Странно, что я сделал это несколько версий, и просто удалил запросы на выборку, которые у меня были в основных данных для этой версии, и затем он начал сбой. К сожалению, я не могу выдавать всю мою модель данных просто потому, что мы находимся под NDA :( –

ответ

1

Я нашел, что я должен удалить кэш после обновления приложения:

Либо не кэшировать неправдоподобные детали

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

или удалить кэш при обновлении

[NSFetchedResultsController deleteCacheWithName:@"Master"]; 
+0

имеет смысл. (вы должны отметить признак) – nielsbot

+0

Я собираюсь добавить эту строку кода, чтобы узнать, работает ли она, но мне интересно, относится ли это только к приложениям, которые фактически используют классы NSFetchedResultsController в своих приложениях. –

+0

Это, казалось, помогло, но это не согласуется. Теперь, вместо того, чтобы каждый раз, когда я делаю обновление, я получаю его только каждые 4 или 5 попыток. Остальная часть В любом случае, вы все знаете, чтобы заставить CoreData удалить все кеши, которые он может хранить в отношении сохраненных запросов? –

Смежные вопросы