2013-04-28 3 views
1

Я изучаю, как обрабатывать иерархии диспетчера представлений с помощью раскадровки. У меня есть 2 ViewControllers: корень типа cwViewController (я понимаю, это «я» ниже) и второй тип WorkspaceViewController. Я получаю «Попытка представить во время презентации!» в результате этого кода.Переключатель контроллера простого вида: пытается представить во время презентации.

- (IBAction)nextView { 
    WorkspaceViewController *workspace = [[WorkspaceViewController alloc] initWithNibName:nil bundle:nil]; 
    [self presentViewController:workspace animated:YES completion:NULL]; } 

Ответ на How to present view controller properly? ближайший ответ, который может применяться, но не совсем подходит этот сценарий, потому что я не переключаясь между VCs, я просто представляя один, а затем отвергая его, чтобы отобразить оригинал.

Затем я попытался отклоняя текущий до представления второго, как это было предложено несколько ответов, например:

[self dismissViewControllerAnimated:NO completion:nil]; 
[self presentViewController:workspace animated:YES completion:NULL]; 

Но это только получает мне дополнительное предупреждение: Попытка отклонить от вида контроллера во время презентации или увольнение продолжается!

Выполнение некоторых других исследований я видел подобные проблемы были решены путем добавления блока

[self dismissViewControllerAnimated:YES...] 

Но что здесь не поможет, потому что мое предупреждение происходит, прежде чем я даже добраться до точки, где я называю, что распускать метод , Дальнейшее знание о том, как должен обрабатываться порядок и иерархия представлений, будет большой помощью. Огромное спасибо.

+0

Во-первых, если вы используете раскадровку, вам следует назначить init'ing WorkspaceViewController. Это не способ создать экземпляр контроллера просмотра из раскадровки. У вас есть какие-то переходы в раскадровке? – rdelmar

+0

Возникает ли эта проблема из-за быстрого нажатия кнопки nextView более одного? – user523234

+0

rdelmar, no Я еще не использовал segues. Не стесняйтесь указывать мне в правильном направлении. user523234 Это происходит при первом вызове следующего вида (он вызывается из наблюдателя уведомления). Спасибо всем. – roro

ответ

0

попробовать

[self presentModalViewController:workspace animated:YES]; 
if (![[self modalViewController] isBeingPresented]) { 
     [self dismissModalViewControllerAnimated:YES]; 
} 
2

ли вы создать SEGUE от кнопки к вашему WorkSpaceViewController? Если это так, вы, вероятно, попытаетесь представить WorkSpaceView дважды - один раз, когда кнопка выбрана, и один раз из cwViewController. Чтобы устранить ошибку, удалите segue с кнопки на WorkSpaceViewController, а затем заново создайте segue - на этот раз между cwViewController и WorkSpaceViewController. Это должно позаботиться об этом.

2
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 

// TODO: make this all threaded? 
// crop the image to the bounds provided 
img = [info objectForKey:UIImagePickerControllerOriginalImage]; 
NSLog(@"orig image size: %@", [[NSValue valueWithCGSize:img.size] description]); 

// save the image, only if it's a newly taken image: 
if ([picker sourceType] == UIImagePickerControllerSourceTypeCamera) { 
    UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil); 
} 

// self.image_View.image = img; 
// self.image_View.contentMode = UIViewContentModeScaleAspectFit; 

NSLog(@"Picker has returned"); 
[self dismissViewControllerAnimated:YES 
         completion:^{ 
          ModalViewController *sampleView = [[ModalViewController alloc] init]; 
          [self presentModalViewController:sampleView animated:YES]; 
         }]; 
} 
Смежные вопросы