Позвольте мне указать некоторый контекст: я создаю приложение с вкладками, которое позволяет пользователю находить и просматривать некоторые видеоролики, размещенные на нашем сервере. Каждая вкладка имеет видео, сгруппированные по-разному с сегментированным элементом управления на панели навигации, который пользователь может использовать для сортировки списка еще точнее (по названию, дате и т. Д.). При нажатии «Сортировка» в сегментированном элементе управления контроллер модального представления представлен опциями, доступными на определенной вкладке. Выбирается опция, и выбор передается обратно в контроллер родительского представления, который вызывает сервер для отсортированного списка.Modal View reappearing + crashing: «Попытка перехода во время перехода продолжается»
Теперь вот в чем проблема: на iOS 4.2, который мы хотели бы поддержать, модальный вид либо сбрасывается после выбора сортировки, либо отклоняется, а затем снова появляется снова. Если он снова появляется, он делает это только один раз и НЕ зацикливается на неопределенное время. Я знаю, что это имеет какое-то отношение к переходу и жизненному циклу представления, но я не могу понять, что это правильно.
Код:
родительское представление
-(void) segmentAction:(id)sender{
//create a sort view and pass it a value that indicates what the options should be
ModalSortViewController *sortView = [[ModalSortViewController alloc]
initWithNibName:nil bundle:nil sortByView:0];
[sortView setDelegate:self];
[sortView setModalTransitionStyle:UIModalTransitionStylePartialCurl];
[sortView setModalPresentationStyle:UIModalPresentationFormSheet];
[self presentModalViewController:sortView animated:YES];
}
-(void) refresh:(id)sender{
[self fetchEntries];
}
//Delegate protocol for all tabbed table views
//Receives buttonIndex from the modal sort view
-(void)sortByButtonIndex:(int)buttonIndex{
if(buttonIndex==1){
//If sorting by title
fetchURL = @"fakeURL.com/?method=iGetCategories&sortBy=category&sortByOrder=ASC";
[self fetchEntries];
}
else if (buttonIndex==2){
//If sorting by number of items
fetchURL = @"fakeURL.com/?method=iGetCategories&sortBy=count&sortByOrder=DESC";
[self fetchEntries];
}
else if(buttonIndex==0){
//Resets sort selection to nothing
segmentedControl.selectedSegmentIndex = -1;
}
[self dismissModalViewControllerAnimated:YES];
}
модальное вид
@synthesize delegate, option1, option2;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil sortByView:(int)_viewInt
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
sortChosen = 0;
viewInt = _viewInt;
}
return self;
}
//This method is called whenever a selection on the modal view has been made.
//The button tags have been set in IB and are sent to the parent table view controller
//where a switch statement is in place to sort its data by the selection.
-(IBAction)madeSelection:(id)sender{
sortChosen = [sender tag];
[self.delegate sortByButtonIndex:sortChosen];
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];//Added after Felix pointed out that the super was not called
switch (viewInt) {
case CAT_FOLDERS:
[self.option1 setTitle:@"By Category Name" forState:UIControlStateNormal];
[self.option2 setTitle:@"By Number of Items" forState:UIControlStateNormal];
break;
case PRES_FOLDERS:
[self.option1 setTitle:@"By Presenter Name" forState:UIControlStateNormal];
[self.option2 setTitle:@"By Number of Items" forState:UIControlStateNormal];
break;
case MEDIA:
[self.option1 setTitle:@"By Media Title" forState:UIControlStateNormal];
[self.option2 setTitle:@"By Release Date" forState:UIControlStateNormal];
break;
default:
break;
}
}
Краш Результаты:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: 'Attempting to begin a modal transition from <UINavigationController:
0x139160> to <ModalSortViewController: 0x172810> while a transition is already in
progress. Wait for viewDidAppear/viewDidDisappear to know the current transition has completed'
Извините за длину. Я хотел быть предельно ясным и тщательным. Заранее спасибо!
EDIT: Я должен упомянуть, что появление сбоя/повторения кажется зависящим от того, где вызывается sortByButtonIndex: и когда представление отклонено.
Спасибо, что опубликовали ваше решение. Предлагая щедрость часто психологический триггер, который заставляет вас думать сложнее и найти решение самостоятельно, поэтому не жалеете о «потерянной» репутации в любом случае :) – MrTJ