Мониторинг стека навигации - PullRequest
0 голосов
/ 11 января 2010

Может кто-нибудь сказать мне, почему это сравнение заставляет мое приложение зависать и зависать?

NSArray *viewControllerArray = [controlFromMap.navigationController viewControllers];
NSUInteger parentViewControllerIndex = [viewControllerArray count] - 3 // or - whatever;
NSLog(@"Parent view controller: %@", [viewControllerArray objectAtIndex:parentViewControllerIndex]);



if([[[viewControllerArray objectAtIndex:parentViewControllerIndex]stringValue] isEqualToString: @"FromAddressController"]){

    _mapView.showsUserLocation = NO;
}
else{

_mapView.showsUserLocation = YES;
}

Ответы [ 3 ]

1 голос
/ 11 января 2010

[viewControllerArray objectAtIndex: parentViewControllerIndex] должен возвращать экземпляр подкласса UIViewController. Убедитесь, что он отвечает на -stringValue или (при условии, что FromAddressController является именем класса), сделайте так:

if([[viewControllerArray objectAtIndex:parentViewControllerIndex] class] == [FromAddressController class])
1 голос
/ 11 января 2010

Если вы добавите:

NSLog(@"parentViewControllerIndex: %d", parentViewControllerIndex);

после строки:

NSUInteger parentViewControllerIndex = [viewControllerArray count] - 3;

Какое значение вы видите в консоли?

0 голосов
/ 11 января 2010

Также эта строка:

if([[[viewControllerArray objectAtIndex:parentViewControllerIndex]stringValue] isEqualToString: @"FromAddressController"]){

выглядит подозрительно для меня.

Я проверил документацию , а класс UIViewController, похоже, не имеет метода -stringValue. Таким образом, вы, вероятно, получите нераспознанное исключение селектора, и ваше приложение будет аварийно завершено.

Возможно, вы имеете в виду nibName вместо stringValue?

...