在给定的类中声明多个委托

时间:2013-04-26 03:46:25

标签: objective-c delegates protocols

我已经宣布了两个协议

@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>,并实现了deleteObjpreviousObj的功能

这是我的问题:在previous_Clicked [self.browseDelegate respondsToSelector:@selector(previousObj:)]此{{1}}将始终返回NO。

现在,如果我评论删除委托代码并将browseDelegate的名称更改为委托,它将正常工作。

如何在单个类中定义多个协议的委托/属性?

1 个答案:

答案 0 :(得分: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)];
    }
}

希望这有帮助