как узнать текущее имя viewcontroller в iphone - PullRequest
2 голосов
/ 14 апреля 2010

У меня есть BaseView, который реализует UIViewController. Каждое представление в проекте должно реализовывать этот 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];
}

Проблема в том, что в моем представлении «Вход в систему» ​​также реализован BaseView, проверяется вход в систему и снова открывается LoginView, то есть застрявший в рекурсивных вызовах.

Могу ли я проверить метод checkLoginStatus, если запрос от LoginView, тогда не предпринимать никаких действий, иначе проверьте вход в систему. Пример:

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

Пожалуйста, помогите ..

Ответы [ 3 ]

5 голосов
/ 14 апреля 2010

Используйте следующий метод:

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];
}
2 голосов
/ 14 апреля 2010

реализовать пустой checkLoginStatus в логине.

@implementation Login
  -(void) checkLoginStatus {}
@end
0 голосов
/ 14 апреля 2010

Добавьте один параметр в 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];

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...