Основные данные: потеряна возможность сохранять новые документы, но по-прежнему можно редактировать и сохранять существующие документы.

В настоящее время я разрабатываю первую версию приложения, используя NSPersistentDocument и облегченную миграцию. Модель данных теперь обновлена ​​до версии 12. При переходе с версии 9 на версию 10 у меня пропала возможность сохранять новые документы, но до сих пор не замечал, так как тестировал с теми же старыми документами из первых версий.

Я по-прежнему могу редактировать и сохранять эти документы, я даже могу создавать документы с более старыми версиями моего приложения и переносить их с помощью текущей версии.

Когда я открываю новый документ, редактирую его и жду автоматического сохранения или сохраняю сам, configurePersistentStoreCoordinatorForURL вылетает:

2017-03-31 07:58:51.409160+0200 MyCalcApp[5172:1857474] [General] Cannot perform operation since entity with name '(null)' cannot be found
2017-03-31 07:58:51.411774+0200 MyCalcApp[5172:1857474] [General] (
    0   CoreFoundation                      0x00007fffd037937b __exceptionPreprocess + 171
    1   libobjc.A.dylib                     0x00007fffe516d48d objc_exception_throw + 48
    2   CoreFoundation                      0x00007fffd03f7c3d +[NSException raise:format:] + 205
    3   AppKit                              0x00007fffce48ff1b -[_NSManagedProxy _entity] + 138
    4   AppKit                              0x00007fffce490178 -[_NSManagedProxy fetchRequestWithSortDescriptors:limit:] + 89
    5   AppKit                              0x00007fffce49063f -[_NSManagedProxy _storesDidChange:] + 119
    6   CoreFoundation                      0x00007fffd030550c __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 12
    7   CoreFoundation                      0x00007fffd030540b _CFXRegistrationPost + 427
    8   CoreFoundation                      0x00007fffd0305172 ___CFXNotificationPost_block_invoke + 50
    9   CoreFoundation                      0x00007fffd02c25a3 -[_CFXNotificationRegistrar find:object:observer:enumerator:] + 1827
    10  CoreFoundation                      0x00007fffd02c15dc _CFXNotificationPost + 604
    11  Foundation                          0x00007fffd1ce5997 -[NSNotificationCenter postNotificationName:object:userInfo:] + 66
    12  CoreData                            0x00007fffcfed9736 -[NSPersistentStoreCoordinator(_NSInternalMethods) _postStoresChangedNotificationsForStores:changeKey:options:] + 246
    13  CoreData                            0x00007fffcff9e1c7 __91-[NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error:]_block_invoke + 3015
    14  CoreData                            0x00007fffcffaf378 gutsOfBlockToNSPersistentStoreCoordinatorPerform + 200
    15  libdispatch.dylib                   0x00000001000da78c _dispatch_client_callout + 8
    16  libdispatch.dylib                   0x00000001000db5ad _dispatch_barrier_sync_f_invoke + 307
    17  CoreData                            0x00007fffcff99f52 _perform + 210
    18  CoreData                            0x00007fffcfec9994 -[NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error:] + 564
    19  AppKit                              0x00007fffce4b3c54 -[NSPersistentDocument configurePersistentStoreCoordinatorForURL:ofType:modelConfiguration:storeOptions:error:] + 1176
    20  MyCalcApp                      0x000000010000ee1f -[Document configurePersistentStoreCoordinatorForURL:ofType:modelConfiguration:storeOptions:error:] + 735
    21  AppKit                              0x00007fffce7d8ee8 -[NSPersistentDocument(NSDeprecatedInternal) _configurePersistentStoreCoordinatorForURL:ofType:error:] + 159
    22  AppKit                              0x00007fffce4b43b9 -[NSPersistentDocument writeToURL:ofType:forSaveOperation:originalContentsURL:error:] + 754
    23  AppKit                              0x00007fffce4b5ad0 -[NSPersistentDocument writeSafelyToURL:ofType:forSaveOperation:error:] + 767
    24  AppKit                              0x00007fffce930935 __85-[NSDocument(NSDocumentSaving) _saveToURL:ofType:forSaveOperation:completionHandler:]_block_invoke_2.1116 + 233
    25  AppKit                              0x00007fffce93083d __85-[NSDocument(NSDocumentSaving) _saveToURL:ofType:forSaveOperation:completionHandler:]_block_invoke.1113 + 454
    26  AppKit                              0x00007fffce92e973 __85-[NSDocument(NSDocumentSaving) _saveToURL:ofType:forSaveOperation:completionHandler:]_block_invoke_2.969 + 2071
    27  AppKit                              0x00007fffce34916b __62-[NSDocumentController(NSInternal) _onMainThreadInvokeWorker:]_block_invoke.1972 + 160
    28  CoreFoundation                      0x00007fffd030f21c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12
    29  CoreFoundation                      0x00007fffd02f0034 __CFRunLoopDoBlocks + 356
    30  CoreFoundation                      0x00007fffd02efb76 __CFRunLoopRun + 1878
    31  CoreFoundation                      0x00007fffd02ef1c4 CFRunLoopRunSpecific + 420
    32  HIToolbox                           0x00007fffcf850ebc RunCurrentEventLoopInMode + 240
    33  HIToolbox                           0x00007fffcf850cf1 ReceiveNextEventCommon + 432
    34  HIToolbox                           0x00007fffcf850b26 _BlockUntilNextEventMatchingListInModeWithFilter + 71
    35  AppKit                              0x00007fffcddebe24 _DPSNextEvent + 1120
    36  AppKit                              0x00007fffce56785e -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 2796
    37  AppKit                              0x00007fffcdde07ab -[NSApplication run] + 926
    38  AppKit                              0x00007fffcddab1de NSApplicationMain + 1237
    39  MyCalcApp                      0x0000000100017ac2 main + 34
    40  libdyld.dylib                       0x00007fffe5a52235 start + 1
    41  ???                                 0x0000000000000005 0x0 + 5
)

Я искал сущность с отсутствующим именем, но не нашел. Модель данных выглядит нормально, даже когда я смотрю на исходный код XML. Нет NSObjectController или NSArrayController, в которых отсутствует имя объекта. configurePersistentStoreCoordinatorForURL вылетает независимо от того, перезаписываю я его или нет (для упрощенной миграции).

Я очистил все папки с производными данными Xcode, о которых только мог подумать, скомпилировал и запустил приложение на разных компьютерах Mac с разными версиями Xcode (8.3 и 8.2.1), везде одна и та же проблема. Аргумент запуска com.apple.CoreData.SQLDebug не дает никакой полезной информации.

Я добавил несколько объектов из версии модели 9 в 12 и, возможно, удалил один, но точно не помню.

Есть ли какое-то другое место, где Xcode скрывает информацию о версии модели данных, такую ​​как хэши? Есть идеи, где искать? Должен ли я воссоздать модель данных с нуля?


person Dirk    schedule 31.03.2017    source источник


Ответы (1)


Всегда полезно объяснить свою проблему кому-то другому, чтобы решить ее. Я нашел ошибку там, где не ожидал.

У меня есть два объекта, которые связаны отношением ко многим: серия измерений и измерений. Я перечисляю их в двух табличных представлениях:

Два представления таблицы

Если я нажму на серию в левой таблице, я хочу, чтобы правая таблица показывала соответствующие измерения. Таким образом, левое представление таблицы относится к контроллеру массива в режиме имени объекта и с его контекстом управляемого объекта, привязанным к File's Owner.managedObjectContext. Чтобы значения в правом табличном представлении зависели от выбора слева, я создал NSArrayController в режиме класса (NSMutableDictionary) и привязал его набор содержимого к правильному набору отношений первого контроллера:

режим контроллера массива неправильные привязки

Что я сделал неправильно, так это то, что я также привязал контекст управляемого объекта этого контроллера к File's Owner.managedObjectContext. Я думал, что нужно сделать какие-либо изменения постоянными, но это не так. Как ни странно, это работало, когда я использовал существующие документы, но не работал, когда я создавал новые. Вот правильные настройки для измерений NSArrayController:

правильные привязки

person Dirk    schedule 02.04.2017