Подтвердить что ты не робот

IOS: невозможно скомпилировать модель CoreData из-за внесенных индексов в Xcode 9

В соответствии с примечаниями к выпуску Xcode 9 добавляет поддержку извлеченных индексов:

"Редактор модели данных представляет собой унифицированный интерфейс для базовых данных новая функция индексов выборки, а также ее существующий индекс свойств и сущностей. Старые модели данных переводятся на выбрать форму индекса для редактирования и сохранить в старый формат файла, когда необходимо. Компиляция модели данных с целью развертывания ниже, чем iOS 11, watchOS 4, macOS 10.13 или tvOS 11 продолжают генерировать совместимая скомпилированная форма. (30843153)"

В моем проекте установлен параметр развертывания для iOS 9, но я не могу скомпилировать мою модель CoreData, он дает мне следующие ошибки для каждого объекта, который имеет составной набор индексов:

Model.xcdatamodeld/Model.xcdatamodel:MyEntity|compoundIndex[0]: error: Expression requires a concrete result type.  
Model.xcdatamodeld/Model.xcdatamodel:MyEntity|compoundIndex[0]: error: Expression attributes are not compatible with the current deployment target.  
Model.xcdatamodeld/Model.xcdatamodel:MyEntity|compoundIndex[1]: error: Expression requires a concrete result type.  
Model.xcdatamodeld/Model.xcdatamodel:MyEntity|compoundIndex[1]: error: Expression attributes are not compatible with the current deployment target.  
Model.xcdatamodeld/Model.xcdatamodel:MyEntity: error: Fetch Indexes feature requires iOS deployment target 11.0 or later  
Model.xcdatamodeld/Model.xcdatamodel:MyEntity: error: Fetch Indexes feature requires Xcode 9.0 tools or later  

Любая идея, как исправить ошибку сборки?

UPDATE

Xcode 9 корректно преобразует составные индексы в индексы выборки для всех случаев, кроме тех, которые созданы из отношений, как указано в разделе "Известные проблемы":

Редактор модели данных поддерживает только создание индексов выборки из атрибутов и выражений в этой бета-версии, а не из отношений. (32407895)

Отраженные индексы выборки выглядят так: в раскрывающемся меню можно выбрать только следующие атрибуты:

введите описание изображения здесь

Однако в документе нет обходного пути, описанного в документе.

4b9b3361

Ответ 1

Это исправлено в Xcode 9 beta 2, в соответствии с примечаниями к выпуску:

Редактор модели данных Xcode поддерживает создание индексов выборки из атрибуты, выражения и отношения. (32407895)

Ответ 2

Я просто столкнулся с этой проблемой в Xcode 9 GM. Я заметил, что снятие флажка Ascending в редакторе индекса вызвало эту ошибку (она появилась только после того, как я сделал новый индекс). Я предполагаю, что корректировка этого атрибута индекса поддерживается только в индексах выборки iOS 11 (вы заметите, что любой индекс, который вы делали до Xcode 9, указан как восходящий по умолчанию).

TL; DR. Убедитесь, что флажок Ascending установлен для всех свойств в редакторе индекса выборки.

Ответ 3

Я подал ошибку с Apple, поскольку, похоже, не было хорошего исправления. На данный момент я изменил "Версию инструментов" с Automatic/Xcode 9 на Xcode 8. Это фиксировало мою проблему до тех пор, пока ошибка не будет исправлена.

Также возможно, что некоторые модели просто не совместимы с новыми индексами. В моем случае это были подклассовые модели (т.е. Из абстрактных классов), которые имели отношения к другим типам. Например:

PIFolder
|
|-----PIFolderProject -> index: defaultItem (task relationship)
|-----PIFolderNotebook-> index: defaultItem (note relationship)