我在这里看到了很多这样的问题和答案,但无法找到问题的解决方案。我试图将数据从一个视图控制器发送到另一个视图控制器并使用委托。但不知道为什么我的postDelegate没有响应选择器。这段代码有问题或者问题是什么?
PostViewController.h文件
@protocol GetDataDelegate <NSObject>
-(void)getPassedInfo:(NSString*)info;
@end
@interface PostViewController : UIViewController
@property (nonatomic, weak) id <GetDataDelegate> postDelegate;
@end;
PostViewController.m文件
#import "PostViewController.h"
- (IBAction)postData:(id)sender {
if ([_postDelegate respondsToSelector:@selector(getPassedInfo:)]) {
[self.postDelegate getPassedInfo:@"data"];
NSLog(@"responds");
}
[self dismissViewControllerAnimated:YES completion:nil];
}
在第二个视图控制器.h文件
中#import "PostViewController.h"
@interface MainViewController : UITableViewController <GetDataDelegate>
和.m文件
@implementation MainWindowTableViewController
- (void)viewDidLoad
{
[super viewDidLoad];
PostViewController * postController = [[PostViewController alloc]init];
postController.postDelegate = self;
}
这是委托方法:
-(void)getPassedInfo:(NSString *)info{
NSLog(@"info is %@", info);
}
答案 0 :(得分:0)
您需要将postController
设为属性或ivar。目前它是viewDidLoad
方法中的局部变量,在viewDidLoad
完成之后将被解除分配,如上所述@CodaFi。
#import "PostViewController.h"
@interface MainViewController : UITableViewController <GetDataDelegate>
@property (nonatomic, strong) PostViewController *postController;
@end
然后:
- (void)viewDidLoad
{
[super viewDidLoad];
self.postController = [[PostViewController alloc]init];
self.postController.postDelegate = self;
}