2012-02-01 43 views
0

NSCollectionView有一个代表,应符合NSCollectionViewDelegate如何更改或扩展NSCollectionView的委托?

- (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’的一种表现。

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

回答

1

你需要投要么是这样的:。

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

或在您的第二个示例中:

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