无法通过IBAction

时间:2016-07-01 15:08:53

标签: ios objective-c delegates storyboard protocols

我的UIBarButtonItem名为UINavigationBar selectRoleButton。在这个类(AEFeedsViewController)中,我有一个协议:

@protocol AERoleSelectProtocol <NSObject>

- (void)presentLoginViewController;

@end

目标操作selectRoleButtonAERoleSelectViewController连接到IBAction,其中包含container,其中包含AERoleSelectTableViewController

这是我的故事板的图片

Storyboard

以下是IBAction的{​​{1}}:

selectRoleButton

因此,点击按钮时,它会在容器中显示- (IBAction)selectRole:(UIBarButtonItem *)sender { NSLog(@"Sender: %@", sender); // Unable to breakpoint, NSLog won't log...? AERoleSelectTableViewController *roleViewControler = [self.storyboard instantiateViewControllerWithIdentifier:@"RoleTableVC"]; roleViewControler.delegate = self; // delegate is not being passed/set [self presentViewController:roleViewControler animated:YES completion:nil]; } AERoleSelectViewControllerAERoleSelectTableViewController的委托属性为

  

AERoleSelectTableViewController

IBAction应该传递并设置AERoleSelectTableViewController.h @property (weak, nonatomic) id <AERoleSelectProtocol> delegate;对象,但它是delegate。断点似乎不起作用,它在方法上根本不会破坏。我甚至尝试编写自己的方法并将按钮连接到那个,但断点仍然无法捕获它。由于某种原因,我也无法使用nil方法打印任何内容。

NSLog中,我的AERoleSelectTableViewController.m有一个switch语句,一个案例使用该委托并调用didSelectRowAtIndexPath:上符合AEFeedsViewController的方法。

AERoleSelectProtocol

但由于AERoleSelectTableViewController.m ... if (self.delegate) { [self.delegate presentLoginViewController]; } delegate,因此显然永远不会被调用。

修改:

我尝试在nil按钮上禁用目标操作IBAction并使用segue以模态方式显示它。

selectRole button modal segue

我的segue方法:

selectRole

正在调用该方法,我可以断点并且它正在崩溃

  

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"showRoleView"]) { NSLog(@"Sender: %@", sender); AERoleSelectTableViewController *roleViewController = (AERoleSelectTableViewController *)[segue destinationViewController]; roleViewController.delegate = self; } }

使用崩溃日志:

  

[AERoleSelectViewController setDelegate:]:无法识别的选择器发送到实例

如上所述,我在roleViewController.delegate = self;上有一个delegate属性,所以应该没有问题。但它立即崩溃,AERoleSelectTableViewController.h甚至没有被调用viewDidLoad

这是否与我在AERoleSelectTableViewController内的某个班级设置的方式有关?我尝试在container上的容器类(AERoleSelectTableViewController)上设置委托,当调用[segue destinationViewController]时,设置委托对象,但只显示容器视图(只是tableView) ,没有背景等,viewDidLoad根本不存在,这是预期给定的代码。

RoleSelectViewController设置为包含容器的类(RoleSelectViewController)时,首先调用容器的类[segue destinationViewController]。所以代表没有设置。然后在持有容器的类上调用viewDidLoad,并成功设置委托。我是否能够将包含容器的类的委托传递给容器,即使首先调用容器?使用容器甚至是正确的方法吗?是否需要一个容器,或者我可以直接将tableView放在那里吗?

0 个答案:

没有答案