所以在我的app委托中,我试图通过执行以下操作从UITabBarController呈现modalViewController:
self.tabBarController = [[UITabBarController alloc] init];
LoginViewController* loginViewController = [[LoginViewController alloc] init];
loginViewController.delegate = self;
[self.tabBarController presentModalViewController:loginViewController animated:NO];
[loginViewController release];
并且app delegate中定义的委托是:
- (void)userDidLogin:(LoginViewController *) loginViewController
{
NSLog(@"DELEGATE CALLED, DISMISSING");
[self.tabBarController dismissModalViewControllerAnimated:NO];
}
这是我的LoginViewController:
protocol LoginViewControllerDelegate;
@interface LoginViewController : UIViewController <MBProgressHUDDelegate>
{
id<LoginViewControllerDelegate> delegate;
}
@property (assign) id<LoginViewControllerDelegate> delegate;
@end
@protocol LoginViewControllerDelegate
- (void)userDidLogin:(LoginViewController *) loginViewController;
@end
问题是这个(userDidLogin:(LoginViewController *) loginViewController)
从未被调用过......为什么会这样?
我在我的LoginViewController实现中调用了以下内容,这称为
[self.delegate userDidLogin:self];
更新
我得到了现在的代表。现在的问题是,当我调用[self.tabBarController dismissModalViewControllerAnimated:YES]时,它不会关闭模态视图控制器。
答案 0 :(得分:0)
您没有从LoginViewController发布任何代码,但是在该类的代码中,您需要在准备解除它时添加以下行(可能是当用户单击“登录”按钮并且登录成功时)。
if (delegate && [delegate respondsToSelector:@selector(userDidLogin:)])
[delegate performSelector:@selector(userDidLogin:) withObject:self];
更新:
我想我明白这里的问题是什么。根据Apple的文档,当你调用presentModalViewController:animated:该方法设置UIViewController的“modalViewController”属性的值(在本例中是你的UITabBar)。但是,该属性仅维护对modalViewController的弱引用。这很重要因为你初始化了LoginViewController,将它传递给presentModalViewController:animated:然后你释放它。由于presentModalViewController:animated:没有保留对LoginViewController的强引用,UITTabBar以后无法解除它。事实上,我很惊讶你所做的并没有导致EXC_BAD_ACCESS崩溃。我建议您删除“[loginViewController release]”语句,然后在调用“[self.tabBarController dismissModalViewControllerAnimated:NO]”后释放它。