设置委托对象中的委托方法没有响应

Posted

技术标签:

【中文标题】设置委托对象中的委托方法没有响应【英文标题】:Delegate method in the set delegate object not responding 【发布时间】:2012-04-26 02:07:25 【问题描述】:

我对这个问题a custom delegate method inside didSelectRowAtIndexPath 有一些类似的担忧。

但是,在我的情况下,在访问名为 BarCodeViewController 的 UIViewController 委托对象之前,我应该首先从初始视图控制器传递 2 个视图控制器,即 CardViewController,它是一个表视图控制器。我正在通过以下方式为我的自定义委托设置委托对象:

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

    CardDetailsViewController *details = [self.storyboard instantiateViewControllerWithIdentifier:@"cardDetails"];

    Card *selectedCard = [self.myWallet objectAtIndex:indexPath.row]; // I want this selected card to be accessible until the user clicks another card or during end of program.

    [self.navigationController pushViewController:details animated:YES];

    [self.delegate cardWalletViewController:self withCurrentCard:selectedCard];

    [self setDelegate:self.barCodeVC]; // barCodeVC is declared in CardWalletViewController.h as @property (nonatomic, strong) BarCodeViewController *barCodeVC;

    if (self.delegate) 
        NSLog(@"delegate is not nil");
    


这就是我如何实例化我设置为委托对象的视图控制器

- (void)viewDidLoad

    [self setBarCodeVC:[self.storyboard instantiateViewControllerWithIdentifier:@"myBarcodeVC"]];

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

在我的委托对象中,即 BarCodeViewController 我实现了委托方法

#import "CardWalletViewController.h"
@interface BarCodeViewController () <CardWalletDelegate>

@end

@implementation

- (void)cardWalletViewController:(CardWalletViewController *)sender withCurrentCard:(Card *)currentCard 

    Card *myCurrentCard = currentCard;


    NSLog(@"This is my current card: %@", myCurrentCard);


@end

我想我可以设置我的委托对象,但是委托方法没有被实现,因为我在控制台中没有看到 NSLog(@"this is my current......");当我到达 BarCodeViewController 时。

请指教。

【问题讨论】:

【参考方案1】:

这不是委托的标准用法,很难说出您真正想要发生的事情。但是,它看起来像你的代码......

[self.delegate cardWalletViewController:self withCurrentCard:selectedCard];
[self setDelegate:self.barCodeVC];

正在调用任何“旧”委托(在将其设置为 barCodeVC 之前)。你真的想打电话给“新”代表吗?是不是应该...

[self setDelegate:self.barCodeVC];
[self.delegate cardWalletViewController:self withCurrentCard:selectedCard];

编辑

我的意思是,您正在向这一行的代表发送消息...

[self.delegate cardWalletViewController:self withCurrentCard:selectedCard];

然后你将代理设置为 barCodeVC

[self setDelegate:self.barCodeVC];

因此,消息实际上被发送到代理在设置为 barCodeVC 之前设置的任何位置(另一个视图控制器,或 nil,或...)。也许这就是你想要发生的事情,但它看起来很可疑。

【讨论】:

我希望将 selectedCard 传递给 BarCodeViewController,即 barCodeVC(编辑了我的帖子)。关于你的洞察力,我不太明白你的意思。 编辑:刚刚在 [self setDelegate: self.barCodeVC] 旁边添加了注释; 知道了。啊,我放置了 [self setDelegate:selfBarCodeVC];到 viewDidLoad 方法,以便我可以立即设置我的委托。但是,一旦我到达 BarCodeViewController,委托方法仍然没有响应。请注意,在进入 BarCodeViewController 之前,我会在单击 CardWalletViewController 中的表格单元格后经过另一个表格视图(名为 CardDetailsViewController)。然后,一旦我单击另一个表格单元格(指 CardDetailsViewController),就会出现一个新的视图控制器,即 PerksDetailsViewController。 (下面继续...) 此 PerksDetailsViewController 中存在一个按钮,一旦按下该按钮,就会按下 BarCodeViewController。现在,当我到达此 BarCodeViewController 时,我希望在控制台中看到日志显示 NSLog("This is my current card %@", myCurrentCard),这表明委托方法正在响应。 是的,我可能误解了代码,但同样,看起来您在将委托设置为 BarCodeViewController 之前调用了委托方法。

以上是关于设置委托对象中的委托方法没有响应的主要内容,如果未能解决你的问题,请参考以下文章

UIPopoverPresentationController 中的视图委托没有响应

UIScrollViewDelegate 中的委托方法不响应表格视图滚动事件

PushSharp - 多个无效令牌不调用响应委托

Swift UI 委托方法不起作用

在原始子类中捕获委托方法调用

将 App 委托设置为第一响应者