设置委托对象中的委托方法没有响应
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 中的视图委托没有响应