我有一个带有主视图控制器的应用程序,可以加载“第一页”视图控制器。一旦用户点击了几个按钮,我就会交换“第一页:以第二种方式查看控制器:
[UIView transitionFromView:self.view toView:self.secondPageVC.view duration:1.0 options:UIViewAnimationOptionTransitionFlipFromRight completion:^(BOOL done ) {
[self.view removeFromSuperview];
}];
为了做到这一点,我包括将要加载的“下一页”的头文件,并在当前View控制器的类中创建该下一页的实例。
所有这一切都很好,直到我到达最后一页。其中一个按钮组合将用户发送回第一页。但是,当我尝试在最后一页中包含第一页的头文件时,我收到错误。我认为发生的是每个视图控制器类在其定义中都有下一页的实例,当我们到达最后一页时,添加第一页的实例会导致编译器不喜欢的循环。有人可以向我解释我做错了什么吗?如果我不应该使用这样的视图控制器,我应该如何设置一个有10页可以循环回到第一页的游戏?
答案 0 :(得分:2)
答案 1 :(得分:0)
我认为正在发生的是每个视图控制器类都有一个 在其定义中的下一页的实例以及当我们到达时 最后一页,添加第一页的实例会导致循环 编译器不喜欢。
我认为不是这样。在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
属性使用相同的名称。如果可以的话,我会鼓励你避免视图控制器之间的依赖关系 - 每个视图控制器类真的是否需要知道下一个是什么类型的?如果不是,您的代码将更易于管理,以便您可以根据需要轻松更改控制器的顺序。