【发布时间】:2013-04-26 03:46:25
【问题描述】:
我已经声明了两个协议
@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.m 中,我有两个具有基本相同代码的操作
- (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的名称更改为委托,它将正常工作。
如何在一个类中定义多个协议的委托/属性?
【问题讨论】:
-
这段代码看起来不错。你确定
browseDelegate不是nil吗?您是否将其设置为对象?如果是对象,该对象是否有-previousObj:方法? -
browseDelegate 不为零,我确实设置了对象。正如我上面写的,如果我只将其名称从browseDelegate更改为委托,并评论其他委托一切正常
标签: objective-c delegates protocols