导航堆栈监控

时间:2010-01-11 10:56:46

标签: iphone objective-c uinavigationcontroller mapkit

有谁能告诉我为什么这种比较会让我的应用程序冻结并崩溃?

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 个答案:

答案 0 :(得分:1)

如果你添加:

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

行后:

NSUInteger parentViewControllerIndex = [viewControllerArray count] - 3;

您在控制台中看到了什么价值?

答案 1 :(得分:1)

[viewControllerArray objectAtIndex:parentViewControllerIndex]应返回UIViewController子类的实例。确保它响应-stringValue或(假设FromAddressController是类名)使它成为:

if([[viewControllerArray objectAtIndex:parentViewControllerIndex] class] == [FromAddressController class])

答案 2 :(得分:0)

此外,这一行:

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

对我来说很可疑。

我检查了documentation,而UIViewController类似乎没有-stringValue方法。所以你可能会得到一个无法识别的选择器异常,你的应用程序就会崩溃。

也许您的意思是nibName而不是stringValue