Ответ 1
Это исправлено в Xcode 9 beta 2, в соответствии с примечаниями к выпуску:
Редактор модели данных Xcode поддерживает создание индексов выборки из атрибуты, выражения и отношения. (32407895)
В соответствии с примечаниями к выпуску 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)
Отраженные индексы выборки выглядят так: в раскрывающемся меню можно выбрать только следующие атрибуты:
Однако в документе нет обходного пути, описанного в документе.
Это исправлено в Xcode 9 beta 2, в соответствии с примечаниями к выпуску:
Редактор модели данных Xcode поддерживает создание индексов выборки из атрибуты, выражения и отношения. (32407895)
Я просто столкнулся с этой проблемой в Xcode 9 GM. Я заметил, что снятие флажка Ascending
в редакторе индекса вызвало эту ошибку (она появилась только после того, как я сделал новый индекс). Я предполагаю, что корректировка этого атрибута индекса поддерживается только в индексах выборки iOS 11 (вы заметите, что любой индекс, который вы делали до Xcode 9, указан как восходящий по умолчанию).
TL; DR. Убедитесь, что флажок Ascending
установлен для всех свойств в редакторе индекса выборки.
Я подал ошибку с Apple, поскольку, похоже, не было хорошего исправления. На данный момент я изменил "Версию инструментов" с Automatic/Xcode 9 на Xcode 8. Это фиксировало мою проблему до тех пор, пока ошибка не будет исправлена.
Также возможно, что некоторые модели просто не совместимы с новыми индексами. В моем случае это были подклассовые модели (т.е. Из абстрактных классов), которые имели отношения к другим типам. Например:
PIFolder
|
|-----PIFolderProject -> index: defaultItem (task relationship)
|-----PIFolderNotebook-> index: defaultItem (note relationship)