如何更改或扩展NSCollectionView的委托?

时间:2012-02-01 13:20:11

标签: cocoa delegates nscollectionview

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 个答案:

答案 0 :(得分:1)

你需要一个演员。要么是这样的:

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

或者在你的第二个例子中:

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