【问题标题】:Declaring more than one delegate in a given class在给定的类中声明多个委托
【发布时间】: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中我声明了&lt;DeletedDelegate, BrowseDelegate&gt;这两个协议,并实现了deleteObjpreviousObj的功能

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

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

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

【问题讨论】:

  • 这段代码看起来不错。你确定browseDelegate 不是nil 吗?您是否将其设置为对象?如果是对象,该对象是否有-previousObj: 方法?
  • browseDelegate 不为零,我确实设置了对象。正如我上面写的,如果我只将其名称从browseDelegate更改为委托,并评论其他委托一切正常

标签: objective-c delegates protocols


【解决方案1】:

我发现了如何做到这一点,虽然我不确定为什么上述方法不起作用,但通过发布答案,我希望它会对其他人有所帮助

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

希望对你有帮助

【讨论】:

  • delegate 不是关键字,没有特殊含义。你的问题是别的。
猜你喜欢
  • 2013-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多