2010-04-14 37 views
2

我有實現UIViewController的BaseView。項目中的每個視圖都必須實現此BaseView。我怎麼知道iPhone中的當前視圖控制器名稱

在基本視角,我有方法:

-(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]; 
} 

問題是我的登錄視圖還實現了基本視點,檢查登錄,並再次打開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]; 
    } 
} 

請幫助..

回答

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]; 
} 
+0

偉大的答案謝謝:) – iPhoneDev 2010-04-14 07:44:22

0

添加一個參數checkLoginStatus,當你從LoginView調用方法設置參數和checkLoginStatus檢查參數,如果該參數設置跳過此塊.. .IE

if(![[defaults objectForKey:@"USERID"] length] > 0 && var1 != TRUE) 
{ 
    Login *login=[[Login alloc] initWithNibName:@"Login" bundle:nil]; 
    [self.navigationController pushViewController:login animated:TRUE]; 
    [login release]; 

} 
+0

非常感謝,這將是一個很好的解決方法 – iPhoneDev 2010-04-14 07:21:53

2

實現登錄空checkLoginStatus。

@implementation Login 
    -(void) checkLoginStatus {} 
@end 
相關問題