Как зациклить несколько контроллеров представления для приложения IOS для iphone? - PullRequest
0 голосов
/ 23 февраля 2012

У меня есть приложение с основным viewcontroller, который загружает viewcontroller «первой страницы».как только пользователь нажал несколько кнопок, я заменял контроллер «первая страница: просмотр» на второй таким образом:

        [UIView transitionFromView:self.view toView:self.secondPageVC.view duration:1.0 options:UIViewAnimationOptionTransitionFlipFromRight completion:^(BOOL done ) {
            [self.view removeFromSuperview];
        }];

Для этого я включаю файл заголовка «следующей страницы», которыйсобирается загрузить и создать экземпляр этой следующей страницы в классе текущего контроллера View.

Все это работает нормально, пока я не дохожу до последней страницы. Одна из комбинаций кнопок отправляет пользователя обратно кПервая страница. Однако, когда я пытаюсь включить заголовочный файл первой страницы на последней странице, я получаю ошибки. Я думаю, что происходит, что у каждого класса контроллера представления есть экземпляр следующей страницы в пределах его определения, и когда мычтобы добраться до последней страницы, добавление экземпляра первой страницы вызывает цикл, который не нравится компилятору. Может кто-нибудь объяснить мне, что я делаю неправильно? Если я не должен использовать контроллеры вида, как это, как мне установитьли игра, которая имеет 10 страниц, которые могут вернуться к первой странице?

Ответы [ 2 ]

2 голосов
/ 23 февраля 2012
  1. Включение в ваш .m вместо вашего .h решит вашу проблему
  2. Посмотрите на UINavigationController
0 голосов
/ 23 февраля 2012

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

Не думаю, что это так.В Objective-C объекты не могут быть содержащими в других объектах, только могут ссылаться на другими объектами.То есть, вы никогда не сохраняете весь объект в переменной, вы просто сохраняете указатель на объект в переменной, поэтому объект не может содержать другой объект в том смысле, что объект в C ++ может содержатьдругой объект.

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

@interface MyViewController : UIViewController

@property MyViewController *next;

@end


// ...somewhere in your code...

MyViewController *vc1 = [[MyViewController alloc] initWithNibName:... bundle:...];
MyViewController *vc2 = [[MyViewController alloc] initWithNibName:... bundle:...];
MyViewController *vc3 = [[MyViewController alloc] initWithNibName:... bundle:...];

vc1.next = vc2;
vc2.next = vc3;
vc3.next = vc1;

Теперь я использую три контроллера вида одного и того же типа, чтобы код был коротким, но вам не нужно этого делать.Они даже не обязательно должны использовать одно и то же имя для свойства nextхотел бы поощрять вас избегать зависимостей между контроллерами представления, если вы можете - каждый из ваших классов контроллеров представления действительно должен знать, какой тип является следующим?Вашим кодом будет легче управлять, если они этого не делают, так что вы можете легко изменить порядок контроллеров, если хотите.

...