无法设置委托和调用方法

时间:2013-08-28 07:51:28

标签: iphone ios delegates storyboard

我创建了一个委托,在解除当前视图控制器后将数据传回上一个视图控制器。

这就是我在

中设置委托的方式

PaymentViewController.m

-(IBAction)techProcessAction:(id)sender
{
TechProcessPaymentVC *techVC = [[TechProcessPaymentVC alloc]init];
[techVC setTechDelegate:self];
 NSLog(@"DELEGATE == %@",techVC.techDelegate);

[self performSegueWithIdentifier:@"techProcess" sender:nil];
}

我可以看到委托已设置

Snap2Door[1765:1c703] DELEGATE == <PaymentDetailViewController: 0x9d3a360>

但是当我在TechProcessPaymentVC的{​​{1}}中查看时,我正在viewDidLoad

我想这就是我在DELEGATE == (null)中没有调用回调方法的原因。

这是我在PaymentViewController.m

中定义委托的方式
TechProcessPaymentVC.h

这就是我试图调用@protocol techProcessDelegate <NSObject> -(void) techProcessViewControllerDismissed:(NSString *)paymentStatus; @end @interface TechProcessPaymentVC : UIViewController<UIWebViewDelegate> { id techDelegate; } @property (nonatomic, assign) id<techProcessDelegate> techDelegate;

中存在的方法的方法
PaymentViewController.m

4 个答案:

答案 0 :(得分:2)

你的问题是,你永远不会任何techVC的事情。你分配它,分配它的委托,然后让它超出范围(它将在ARC中解除分配或以其他方式泄露)。

请尝试以下操作:首先,从techProcessAction:中删除实例化和分配。其次,实施prepareForSegue:sender:,然后将self指定为segue techDelegate的{​​{1}}。你的方法看起来像下面的“代码”(我从内存中输入并且没有尝试编译):

destinationViewController

答案 1 :(得分:0)

当您viewDidLoad init实例时,

TechProcessPaymentVC会被调用。代理在此之后设置。因此它是nil。将您的init方法修改为initWithDelegate,然后分配delegate并在viewDidLoad中使用它。

修改

代码:

<强> TechProcessPaymentVC.h

@interface TechProcessPaymentVC : UIViewController

- (id) initWithDelegate:(id<techProcessDelegate>)delegate;

@end

<强> TechProcessPaymentVC.m

#import "TechProcessPaymentVC.h"

@implementation TechProcessPaymentVC

- (id) initWithDelegate:(id<techProcessDelegate>)delegate {
    self = [super init];
    if(self) {
        self.techDelegate = delegate;
    }
    return self;
}

@end

修改你的电话

-(IBAction)techProcessAction:(id)sender
{
    TechProcessPaymentVC *techVC = [[TechProcessPaymentVC alloc]initWithDelegate:self];
    //....
}

希望有所帮助!

答案 2 :(得分:0)

如果目标视图控制器被包装到导航控制器中,则必须在prepareForSegue中以不同方式引用它:

UINavigationController *nav = segue.destinationViewController;
DetailViewController *dvc = [nav.viewControllers objectAtIndex:0];

答案 3 :(得分:-3)

在TechProcessPaymentVC.h中:

@interface TechProcessPaymentVC : UIViewController<UIWebViewDelegate>
{
    id techDelegate_;
}
@property (nonatomic, assign) id<techProcessDelegate> techDelegate;
@end

在TechProcessPaymentVC.m中:

@implementation TechProcessPaymentVC
@synthesize techDelegate = techDelegate_;

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSLog(@"%@", techDelegate_);
}
.
.
.
@end

希望它对你有用!!!