我有实现UIViewController的BaseView。项目中的每个视图都必须实现此BaseView。
在BaseView中,我有方法:
-(void) checkLoginStatus
{
defaults = [[NSUserDefaults alloc] init];
if(![[defaults objectForKey:@"USERID"] length] > 0 )
{
Login *login=[[Login alloc] initWithNibName:@"Login" bundle:nil];
[self.navigationController pushViewController:login animated:TRUE];
[login release];
}
[defaults release];
}
问题是我的Login视图还实现了BaseView,检查登录,然后再次打开LoginView,即卡在递归调用中。
如果请求来自LoginView,我可以检查checkLoginStatus方法然后不采取任何操作检查登录。 例如:
- (void) checkLoginStatus
{
**if(SubView is NOT Login){**
defaults = [[NSUserDefaults alloc] init];
if(![[defaults objectForKey:@"USERID"] length] > 0 )
{
Login *login=[[Login alloc] initWithNibName:@"Login" bundle:nil];
[self.navigationController pushViewController:login animated:TRUE];
[login release];
}
[defaults release];
}
}
请帮助..
答案 0 :(得分:5)
使用以下方法:
if ([self isMemberOfClass:[Login class]])
{
CFShow(@"Yep, it's the login controller");
}
isMemberOfClass
告诉您实例是否是该类的确切实例。还有isKindOfClass
:
if ([self isKindOfClass:[BaseView class]])
{
CFShow(@"This will log for all classes that extend BaseView");
}
isKind测试该类是某个类的扩展名。
所以给出你的例子:
-(void) checkLoginStatus
{
defaults = [[NSUserDefaults alloc] init];
if (![self isMemberOfClass:[Login class]])
{
if (![[defaults objectForKey:@"USERID"] length] > 0 )
{
Login *login=[[Login alloc] initWithNibName:@"Login" bundle:nil];
[self.navigationController pushViewController:login animated:TRUE];
[login release];
}
}
[defaults release];
}
答案 1 :(得分:2)
在Login中实现一个空的checkLoginStatus。
@implementation Login
-(void) checkLoginStatus {}
@end
答案 2 :(得分:0)
在checkLoginStatus中添加一个参数,并在从LoginView调用方法时设置该参数,并在checkLoginStatus中检查该参数是否设置了该参数跳过此块...即
if(![[defaults objectForKey:@"USERID"] length] > 0 && var1 != TRUE)
{
Login *login=[[Login alloc] initWithNibName:@"Login" bundle:nil];
[self.navigationController pushViewController:login animated:TRUE];
[login release];
}