委托respondsToSelector未被调用协议

时间:2015-07-22 22:36:51

标签: ios objective-c xcode protocols

我是Delegate方法的新手。我想知道为什么我的“respondsToSelector”没有被我的代表调用。我相信我把所有东西都放在了正确的位置。如果您需要更多信息,请告诉我!我环顾四周,但我还没有找到一个有效的解决方案!

全部谢谢!

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);
    }

1 个答案:

答案 0 :(得分:1)

在我看来,你实际上是在倒退 - 我会声明委托视图,模式应该成为视图的委托。

那就是说,如果你想这样做,我怀疑问题是你正在对一个模态视图控制器的新实例执行一个segue:

[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;
    }
}