0

この質問については、didSelectRowAtIndexPath内のカスタムデリゲートメソッドと同じような懸念があります。

ただし、私の場合、BarCodeViewControllerという名前のUIViewControllerであるデリゲートオブジェクトに到達する前に、まず、テーブルビューコントローラーであるCardViewControllerである初期ビューコントローラーから2つのビューコントローラーを通過する必要があります。これにより、カスタムデリゲートのデリゲートオブジェクトを設定しています。

- (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");
    }

}

これが、デリゲートオブジェクトとして設定したViewControllerをインスタンス化する方法です。

- (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に到達したとき。

アドバイスをお願いします。

4

1 に答える 1

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(別のView Controller、またはnil、または...)に設定される前にデリゲートが設定されたものに実際に送信されます。たぶんそれはあなたがしたいことですが、それは疑わしいように見えます。

于 2012-04-26T03:23:38.833 に答える