我最近一直在努力解决问题,相信如果解决方案在某个地方在线,我不会在这里发帖。 这是我的问题:
我有一个父VC,其中有3个childVC链接到它。我有三个委托代表向parentVC报告一些动作,即使我为3个使用声明了同样的东西,它也适用于其中2个而不是第3个。
这是我的代码: 在parentVC.m
中// Initializing the clientsListViewController
self.clientsListViewController = [[UIStoryboard storyboardWithName:@"AGZClientsList" bundle:nil] instantiateInitialViewController];
[self addChildViewController:self.clientsListViewController];
[self.clientsListViewController didMoveToParentViewController:self];
self.clientsListViewController.delegate = self;
在我的孩子VC.h
@protocol AGZClientsListViewControllerDelegate <NSObject>
- (void)didClickLeftBarButtonInClientsView:(UIButton*)button;
@end
@interface AGZClientsListViewController : AGZBaseViewController
@property (nonatomic, weak) id <AGZClientsListViewControllerDelegate> delegate;
@end
在我的孩子VC.m
- (void)didClickLeftBarButton:(UIButton*)button
{
if ([self.delegate respondsToSelector:@selector(didClickLeftBarButtonInClientsView:)])
[self.delegate didClickLeftBarButtonInClientsView:button];
}
请帮助我!
答案 0 :(得分:0)
在parentVC
被调用之前发布了delegate
吗?您设置了委托weak
,因此如果该对象是免费的,则会将其设置为nil
。
答案 1 :(得分:0)
可能是您的parentVC未正确符合您的childVC协议。当编译器遇到self.delegate
时,它会尝试找到符合您协议的Controller类;基本上它是试图找到应该实现你在childVC类的@protocol ....@end
部分内已经登记的方法的委托类。可能由于某种原因,它失败了。
让我们试试一下清单 -
您是否在ParentVC的协议列表中声明了自定义委托。在接口声明的parentVC.h
类中执行
@interface parentVC:UINavigationController
PS:我认为你的parentVc是一个导航控制器。无论是导航控制器还是视图控制器都无关紧要。
如果有,请尝试移动
self.clientsListViewController.delegate = self;
在实例化控制器之后,意味着在
之后self.clientsListViewController = [[UIStoryboard storyboardWithName:@"AGZClientsList" bundle:nil] instantiateInitialViewController];
self.clientsListViewController = [[UIStoryboard storyboardWithName:@"AGZClientsList" bundle:nil] instantiateInitialViewController];
并尝试打印self.clientsListViewController以查看您是否拥有childVc的实例。如果它打印为nil则存在您的问题 - 您的parentVC没有您的childVc的正确实例,委托也是如此。在这种情况下,请尝试正确实例化childVC。