Если вы посмотрите документацию по iOS, вы увидите, что модальный контроллер представления не может игнорировать себя (когда это вообще возможно).Правильная форма для вашего первого контроллера представления, чтобы выполнить отклонение.
Думайте об этом так: представление контроллера модального представления дает своего рода владение.Ваш второй контроллер вида ВЛАДЕЕТ первым контроллером вида и ничего НЕ СОБИРАЕТСЯ.Поэтому вызов '[self dismissModalViewControllerAnimatied: YES]' завершается неудачно, потому что второй контроллер представления НЕ ИМЕЕТ модальный контроллер представления.
Как правило, в этой ситуации я установил какое-то отношение делегата между«базовый» вид контроллера и модальный.Вы также можете добавить цель к кнопке отмены из «базового» контроллера вида при настройке.
Может быть так:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
[currentElement release];
currentElement = [elementName copy];
if ([elementName isEqualToString:@"result"] ) {
Prodid = [[NSMutableString alloc] init];
}
page *login=[[page alloc]init];
login.prodid = Prodid;
login.categid=self.categid;
UINavigationController *navCtrl= [[UINavigationController alloc] initWithRootViewController:login];
[[login cancelButton] addTarget:self action:@selector(cancel) forControlEvents:UIControlEventTouchUpInside];
[self presentModalViewController:navCtrl animated:YES];
[login release];
[navCtrl release];
}
-(void) dealloc
{
[Prodid release];
}
// Put this method in the "base" view controller, NOT the modal one
-(void) cancel
{
[self dismissModalViewControllerAnimated:YES];
}