set delegate对象中的Delegate方法没有响应

时间:2012-04-26 02:07:26

标签: iphone ios xcode delegates uitableview

我对这个问题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(@“这是我当前的......”);当我到达BarCodeViewController时。

请咨询。

1 个答案:

答案 0 :(得分:0)

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

[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,或......)之前,实际上将消息发送到委托设置的任何内容。也许这就是你想要发生的事情,但它看起来很可疑。