делегат responsestoselector: селектор не работает

#ios #objective-c #delegates

#iOS #цель-c #делегаты

Вопрос:

Я видел здесь много подобных вопросов и ответов, но не смог найти решения своей проблемы. Я пытаюсь отправить данные с одного контроллера представления на другой и использовать делегирование. Но я не знаю, почему мой 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];
 

}

во втором файле view controllers .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);
 }
 

Комментарии:

1. Этот локальный файл будет уничтожен, когда второй viewDidLoad удалит его фрейм из стека.

Ответ №1:

Вам нужно создать 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;
}
 

Комментарии:

1. Да, я пробовал так, но это не сработало … тот же результат.

2. @andrey Привет, есть какие-нибудь успехи в решении проблемы? У меня такая же проблема.