Как я могу изменить или расширить делегат NSCollectionView? - PullRequest
0 голосов
/ 01 февраля 2012

NSCollectionView имеет делегата, который должен соответствовать NSCollectionViewDelegate.

- (id < NSCollectionViewDelegate >)delegate

У меня есть новый протокол, который расширяет NSCollectionViewDelegate.

@protocol extendedProtocol <NSCollectionViewDelegate>

Теперь в классе контроллера моего CollectionViewItem я пытаюсь вызвать метод делегата следующим образом:

if (
    [self collectionView] 
    && [[self collectionView] delegate] && 
    [[[self collectionView] delegate] conformsToProtocol:@protocol(extendedProtocol)]
        ) 
{
BOOL flag = [[[self collectionView] delegate] doSomeWork:@"abc"];
}

Я получаю предупреждение о том, что «метод экземпляра doSomeWork:« не найден ».

Я пытался сделать

id <extendedProtocol> dg = [[self collectionView] delegate];
BOOL flag = [dg doSomeWork:@"abc"];

Но затем я получаю предупреждение: «Несовместимые типы указателей, инициализирующие« id »выражением типа« id ».

Как правильно изменить протокол делегата NSCollectionView?

1 Ответ

1 голос
/ 01 февраля 2012

Вам нужен актерский состав. Либо так:

BOOL flag = [(id <extendedProtocol>) [[self collectionView] delegate] doSomeWork:@"abc"];

Или во втором примере:

id <extendedProtocol> dg = (id <extendedProtocol>) [[self collectionView] delegate];
...