2015-07-22 3 views
0

Я новичок в методах делегирования. Мне интересно, почему мой «responsesToSelector» не вызывается для моего делегата. Я уверен, что у меня все в нужном месте. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать !!! Ive огляделся, но я все еще не нашел решение, которое работает!Делегат отвечаетToSelector, который не вызывается для протокола

Спасибо всем!

MODAL.h

@protocol Profession <NSObject> 

    -(void)profession:(NSString *)job; 

    @end 


    @interface ProfessionListingViewController : UIViewController  <UITableViewDataSource, UITableViewDelegate, UIScrollViewDelegate>{ 

NSString *string; 
} 
    @property (nonatomic, weak) id<Profession> myDelegate; 
    @end 

MODAL.m

@synthesize myDelegate; 
    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 
     self.profession = @"Testing!!"; 

     if([self.myDelegate respondsToSelector:@selector(profession:)]){ 
     [self.myDelegate profession:self.profession]; 
     } 
     [self dismissViewControllerAnimated:YES completion:nil]; 
    } 

view.h

#import <UIKit/UIKit.h> 
    #import "ProfessionListingViewController.h" 
    #import "LocationViewController.h" 
    @interface ProfessionViewController : UIViewController <Profession> 

VIEW.m

-(IBAction)toProfessionListView:(id)sender{ 
     ProfessionListingViewController *modal = [[ProfessionListingViewController alloc] init]; 
     modal.myDelegate = self; 
     [self performSegueWithIdentifier:@"ModalProfessionList" sender:sender]; 
    } 

    -(void)profession:(NSString *)job{ 
     NSString *test = job; 
     NSLog(@"%@", test); 
    } 
+0

Я предполагаю, что вы имеете в виду, что ваш делегат не реагирует на селектор? Или проблема заключалась в том, что линия с 'responsesToSelector' не была достигнута? – Krumelur

+0

Попробуйте установить точку останова на 'if ([self.myDelegate replysToSelector: @selector (профессия:)]) {' line. Убедитесь, что self.myDelegate действительно является экземпляром вашей реализации Profession. – Krumelur

+0

@ Krumelur Да, он не отвечает на селектор. Он не входит в оператор if и идет прямо сейчас, чтобы отклонить. – hparmar

ответ

1

Мне кажется, что вы на самом деле делаете это в обратном направлении - я бы поставил объявление делегата, и модальный должен стать делегатом представления.

Тем не менее, если вы хотите сделать это таким образом, я подозреваю, что проблема в том, что вы выполняете переход к новому экземпляру модальный контроллер представления:

[self performSegueWithIdentifier:@"ModalProfessionList" sender:sender]; 

То, что вы, вероятно, хотите делать вместо этого использовать prepareForSegue:, возьмите экземпляр вашего модальных зрения, и установить делегат там:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"ModalProfessionList"]) 
    { 
     ProfessionListingViewController *modal = [segue destinationViewController]; 
     modal.myDelegate = self; 
    } 
} 
Смежные вопросы