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, и все настроено так, как у вас. Но при запуске приложения оно не утверждает

[NSTextField copyWithZone:]: нераспознанный селектор, отправленный экземпляру 0x210a60 2009-10-19 13:05:18.772 WrapperTest[24122:a0f] Возникло невыполненное исключение 2009-10-19 13:05:18.774 WrapperTest[24122:a0f] -[NSTextField copyWithZone:]: нераспознанный селектор, отправленный экземпляру 0x210a60 2009-10-19 13:05:18.779 WrapperTest[24122:a0f] *** Завершение работы приложения из-за невыполненного исключения "NSInvalidArgumentException", причина: '-[NSTextField copyWithZone:]: нераспознанный селектор отправлен на экземпляр 0x210a60' *** Стек вызовов при первом броске: ( 0 CoreFoundation 0x977f658a __raiseError + 410 1 libobjc.A.dylib 0x9767ff49 objc_exception_throw + 56 2 CoreFoundation 0x978429db -[NSObjectingObjectSign: 0x9779e026 ___forwarding___ + 950 4 CoreFoundation 0x9779dbf2 _CF_forwarding_prep_0 + 50 5 CoreFoundation 0x97789a5a -[копия NSObject(NSObject)] + 42 6 AppKit 0x918ce1d7 - установщик NSTNObDNO...

Я не уверен, почему те NSTextFields не хватает их copyWithZone так как они должны реализовать это

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

Другие вопросы по тегам