我创建了一个委托,在解除当前视图控制器后将数据传回上一个视图控制器。
这就是我在
中设置委托的方式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
答案 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
希望它对你有用!!!