Cocoa 如何更改或扩展NSCollectionView';谁的代表?

Cocoa 如何更改或扩展NSCollectionView';谁的代表?,cocoa,delegates,nscollectionview,Cocoa,Delegates,Nscollectionview,NSCollectionView有一个委托,该委托应符合NSCollectionViewDelegate - (id < NSCollectionViewDelegate >)delegate @protocol extendedProtocol <NSCollectionViewDelegate> 现在,在我的CollectionViewItem的控制器类中,我尝试以以下方式调用委托的方法: if ( [self collectionView] &

NSCollectionView
有一个委托,该委托应符合
NSCollectionViewDelegate

- (id < NSCollectionViewDelegate >)delegate
@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 dg=[[self-collectionView]委托];
BOOL flag=[dg doSomeWork:@“abc”];
但随后我得到警告,“不兼容的指针类型正在使用类型为'id'的表达式初始化'id'


更改NSCollectionView委托协议的正确方法是什么?

您需要强制转换。如下所示:

BOOL flag = [(id <extendedProtocol>) [[self collectionView] delegate] doSomeWork:@"abc"];
BOOL-flag=[(id)[[self-collectionView]委托]doSomeWork:@“abc”];
或者在您的第二个示例中:

id <extendedProtocol> dg = (id <extendedProtocol>) [[self collectionView] delegate];
iddg=(id)[[self-collectionView]委托];