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委托协议的正确方法是什么?
答案 0 :(得分:1)
你需要一个演员。要么是这样的:
BOOL flag = [(id <extendedProtocol>) [[self collectionView] delegate] doSomeWork:@"abc"];
或者在你的第二个例子中:
id <extendedProtocol> dg = (id <extendedProtocol>) [[self collectionView] delegate];