2012-02-01 42 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];