0

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 委托协议的正确方法是什么?

4

1 回答 1

1

你需要一个演员表。要么像这样:

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

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

id <extendedProtocol> dg = (id <extendedProtocol>) [[self collectionView] delegate];
于 2012-02-01T13:42:47.383 回答