NSCollectionView в 10.6/Xcode 3.2
В Xcode 3.1.2 я использовал для загрузки пера NSCollectionViewItem
в моем подклассе NSCollectionViewItem
как это:
-(id)copyWithZone:(NSZone *)zone
{
id result = [super copyWithZone:zone];
[NSBundle loadNibNamed:@"PersonView" owner:result];
return result;
}
В Xcode 3.2 под 10.6 тот же метод не приводит к ошибке, но не загружает представление в NSCollectionView
или.
Есть ли что-то еще, что нужно сделать, чтобы показать вид? Или есть даже лучший способ сделать это, который приходит со сменой NSCollectionItem
суперкласс NSViewController
?
В конце концов, переопределение copyWithZone
для достижения этой стандартной функциональности мне всегда казалось взломом. Я думаю, что нужно уметь указывать перо, которое предполагается использовать в IB, но похоже, что Apple так не считает.
Я посмотрел на пример, который доступен в документации, но там NSCollectionViewItem
создается программно с помощью initWithNibName
, но я бы хотел создать его в IB.
ОБНОВЛЕНИЕ:
Я сделал то, что предложил kperryua, но теперь я не могу получить доступ к розеткам из NSCollectionViewItem
, Вот что я пытаюсь сделать:
- (void)setRepresentedObject:(id)object {
if (object) {
[labelName setValue:[object name]];
}
}
Я связал имя метки с владельцем файла, который является моим NSCollectionViewItem
, Раньше он отлично работал в 10.5, но теперь розетка не назначена (я проверял это с помощью GDB).
http://img21.imageshack.us/img21/671/picya.png
ОБНОВЛЕНИЕ 2:
Я также связал NSCollectionView
"s itemPrototype
к моему подклассу NSCollectionViewItem
(PersonController).
http://img503.imageshack.us/img503/4672/pic2d.png
Теперь оба File's Owner
из PersonView.nib
и itemPrototype
из NSCollectionView
указать на мой подкласс.
http://img340.imageshack.us/img340/6184/pic3.png
Как вы можете видеть на скриншоте, элемент отображается, но текст метки не может быть изменен как выход. labelName
не доступен
Я также зарегистрировал имя, которое пытаюсь установить, чтобы убедиться, что это не "Имя".
Что нужно сделать, чтобы изменить значение метки?
Любая помощь будет оценена.
2 ответа
Да, Snow Leopard делает это намного проще. В IB щелкните NSCollectionViewItem и установите имя пера и имя пакета (просто оставьте это поле пустым для основного пакета). В своем перо PersonView сделайте NSCollectionViewItem владельцем файла и подключите выход -view к представлению в этом наконечнике. (Похоже, что вы можете настроить это уже в этом перо.) Все остальное должно быть автоматическим, и переопределение copyWithZone: не должно быть необходимым.
Синхронизировать свойство representedObject
со значением элемента IB вы можете использовать привязки какао. Привязать значение TextField к пути ключа модели representedObject.name
владельца файла в этом случае.
Я работал с 10.6 Xcode 3.2 но то, что не может получить к работе, - это то, что вы сделали: подключили элемент IB к выходу моего CollectionViewItem. У меня есть собственный подкласс CollectionViewItem, и все настроено так, как у вас. Но при запуске приложения оно не утверждает
Я не уверен, почему те NSTextFields
не хватает их copyWithZone
так как они должны реализовать это
Я исправил это, я не знал, что мне нужно было объявить эти Outlets как свойства представления, все, включая привязки, похоже, работает.