2013-04-26 38 views
0

我完全糊塗了,並在需要緊急幫助在一個給定類聲明多於一名代表

我宣佈兩個協議

@protocol DeletedDelegate <NSObject> 

- (void) deletedObj: (id) p_objDeleted; 

@end 

@protocol BrowseDelegate <NSObject> 

- (void) nextObj: (id) p_currentObj; 
- (void) previousObj: (id) p_currentObj; 

@end 

在我viewController.h文件我已經聲明代表如下:

@property (nonatomic, weak) id<DeletedDelegate> delegate; 
@property (nonatomic, weak) id<BrowseDelegate> browseDelegate; 
在viewController.mi

有兩個動作是有基本相同的代碼

- (IBAction) previous_Clicked: (id) sender 
{ 
    //If anyone is listening 
    if ([self.browseDelegate respondsToSelector:@selector(previousObj:)]==YES) 
    { 
     //send them the new status 
     [self.browseDelegate previousObj:(self.currentObj)]; 
    } 
} 

- (IBAction) trashBin_Clicked: (id) sender 
{ 

    //If anyone is listening 
    if ([self.delegate respondsToSelector:@selector(deletedObj:)]==YES) 
    { 
     //send them the new status 
     [self.delegate deleteObj:(self.currentObj)]; 
    } 
} 

,並在旁邊接口的UITableViewController我已經宣佈了兩個協議 <DeletedDelegate, BrowseDelegate>以及實施的deleteObj和功能previousObj

這裏是我的問題:在previous_Clicked[self.browseDelegate respondsToSelector:@selector(previousObj:)]總是返回NO 。

現在,如果我評論刪除委託代碼並將browseDelegate的名稱更改爲委託,它將工作得很好。

我的問題是我怎麼能在一個類

+3

此代碼看起來不錯。你確定'browseDelegate'不是'nil'嗎?你把它設置爲一個對象嗎?如果它是一個對象,那麼該對象是否有'-previousObj:'方法? – 2013-04-26 03:53:14

+0

browseDelegate不是零,我確實設置了對象。正如我上面寫的,如果我只將其名稱從browseDelegate更改爲委託,並且評論其他委託全部正常工作 – 2013-04-27 22:26:04

回答

0

我發現如何做到這一點,雖然我不知道爲什麼上面不工作,但張貼的答案我定義協議的乘法代表/屬性希望這將有助於其他

我改變viewController.h如下:

@property (nonatomic, weak) id<DeletedDelegate,BrowseDelegate> delegate; 

,並在我的viewController.m

- (IBAction) previous_Clicked: (id) sender 
{ 
    //If anyone is listening 
    if ([self.delegate respondsToSelector:@selector(previousObj:)]==YES) 
    { 
     //send them the new status 
     [self.delegate previousObj:(self.currentObj)]; 
    } 
} 

希望這會有幫助

+1

'delegate'不是關鍵字,並且沒有特殊含義。你的問題是別的。 – Chuck 2013-06-06 07:26:48