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.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:)]将始终返回 NO。

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

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

4

1 回答 1

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)];
    }
}

希望这可以帮助

于 2013-06-06T07:16:54.523 回答