我的UIBarButtonItem
名为UINavigationBar
selectRoleButton
。在这个类(AEFeedsViewController
)中,我有一个协议:
@protocol AERoleSelectProtocol <NSObject>
- (void)presentLoginViewController;
@end
目标操作selectRoleButton
将AERoleSelectViewController
连接到IBAction
,其中包含container
,其中包含AERoleSelectTableViewController
。
这是我的故事板的图片
以下是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];
}
,AERoleSelectViewController
。 AERoleSelectTableViewController
的委托属性为
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以模态方式显示它。
我的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放在那里吗?