Неизвестная связь перехода: прототип с NSCollectionView

Просто добавив NSCollectionView в Storyboard, код не будет компилироваться с ошибкой: Неизвестное отношение перехода: прототип.

Это известная ошибка Swift/XCode6-beta4 или я что-то упустил?


person Community    schedule 04.08.2014    source источник
comment
Вы пробовали это с бета 5?   -  person Matt Gibson    schedule 05.08.2014
comment
У меня возникла та же проблема почти год спустя с Xcode 7 Beta 1.   -  person TalkingCode    schedule 22.06.2015
comment
Все еще происходит в Xcode 7 beta 3   -  person gbdavid    schedule 21.07.2015
comment
.. и все еще происходит в Xcode 7.1 :(   -  person gbdavid    schedule 05.10.2015
comment
ВСЕ ЕЩЕ проблема с xcode 7.3 beta 4 7D152p. Это абсолютно безумие   -  person user3062913    schedule 24.02.2016


Ответы (4)


Это известная ошибка, и она упоминается (с обходным путем) в заметках о выпуске Xcode. 6 бета-5:

Раскадровка может не скомпилироваться после добавления к ней NSCollectionView. (17009377)!

Обходной путь: выберите xib, который включает NSCollectionView, и загрузите его в представление на основе раскадровки.!

person Damiaan Dufaux    schedule 07.08.2014
comment
Спасибо, я этого не читал. Надеюсь, в следующей бета-версии это обязательно будет исправлено. - person ; 07.08.2014

Обновление для Xcode 7 beta 6 (см. примечания к выпуску): сильный>

Interface Builder поддерживает новый API NSCollectionView в версии 10.11 с использованием источника данных и макетов, как в iOS. (18997303)

  • Обходной путь: Невозможно настроить элементы прототипа в Интерфейсном Разработчике. Используйте -[NSCollectionView registerClass:forItemWithIdentifier:] или -[NSCollectionView registerNib:forItemWithIdentifier:] в коде.

Кто-нибудь пробовал с ним работать раньше? Должен ли я просто добавить пустое представление коллекции в свою раскадровку, затем создать файл пера только для элемента представления коллекции и, наконец, связать его с помощью кода?


Обновление для Xcode 7.1 бета 3

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

person gbdavid    schedule 21.07.2015
comment
еще в версии 7.2 (7C68) :( - person Daniel; 20.02.2016

На самом деле нет необходимости создавать дополнительный файл XIB, если вы уже используете раскадровки.

  1. Удалите связь между NSCollectionView и NSCollectionViewItem

  2. Дайте элементу представления идентификатор

  3. Программно установите прототип элемента в вашем окружении NSViewController:

@IBOutlet weak var collectionView: NSCollectionView!

override func viewDidLoad() {
    self.collectionView.itemPrototype = self.storyboard?.instantiateControllerWithIdentifier("collectionViewItem")
        as NSCollectionViewItem
}

Это сохраняет все представления пользовательского интерфейса в одном месте и, таким образом, обеспечивает более удобный обходной путь, чем наличие чужого XIB-файла.

person Lars Blumberg    schedule 10.03.2016
comment
Удивительно! Спасибо тебе за это. Это так странно, что это работает (так и есть, подтверждено), учитывая имя метода, которое включает слово Controller (как этот элемент является контроллером? Можно было бы ожидать, что этот метод будет возвращать, например, только объекты типа NSViewController, если я должен был предположить) . - person mz2; 07.05.2016
comment
Ах, неважно, я сказал слишком рано, не заметил провал утверждения. В документации теперь предлагается больше не устанавливать свойство прототипа элемента (во всяком случае, при использовании SDK 10.11). - person mz2; 07.05.2016
comment
Верно. Однако, если вы ориентируетесь на более ранние версии OS X до 10.11, это все же лучший обходной путь вместо создания дополнительного файла XIB. - person Lars Blumberg; 08.05.2016

Если вы используете OSX 10.11 SDK, следующая информация из В примечаниях к выпуску Apple для этого указано, что свойство itemPrototype вообще больше не заполняется (это, конечно, предполагает, что ваша минимальная цель развертывания — 10.11):

Чтобы использовать новую модель API NSCollectionView, вы указываете макет, устанавливая свойство «collectionViewLayout» NSCollectionView и либо предоставляете «dataSource», либо привязываете «содержимое» вашего CollectionView к NSArray или NSArrayController (см. «Привязка содержимого к NSCollectionView» ниже). ). Вы также должны отключить и отбросить «itemPrototype» NSCollectionView, который является пережитком модели API 10.10 и более ранних версий.

person mz2    schedule 07.05.2016