我有一个分段控件,我用它在三个视图控制器之间切换。我的第一个tableview嵌入在导航控制器中,其中分段控件位于导航控制器中。我在故事板中也有两个自定义segue(动画来自左侧和右侧)。在我的“主”控制器类 - 分段控件的中间 - 我使用此代码
- (IBAction)indexChanged:(id)sender {
if ([sender selectedSegmentIndex] == 0) {
[self performSegueWithIdentifier:@"leftSegue" sender:self];
}
else if ([sender selectedSegmentIndex] == 1){
}
else {
[self performSegueWithIdentifier:@"rightSegue" sender:self];
}
}
这适用于那两个控制器。当那些视图控制器被放在屏幕上时,我仍然可以在最左边和右边的控制器之间移动,但是在我尝试过的每次尝试之后,返回主控制器都会崩溃。我认为这与我不理解我发送self
消息的performSegueWithIdentifier
或我传递给self
的{{1}}有关。
示例:如果在sender:
中我创建了一个新的segue,并且具有来自两个新控制器中的任何一个的唯一标识符,则当拼写正确拼写时,应用程序崩溃说“Receiver没有带标识符的segue”。在这个例子中谁是接收者?
编辑:我在这里添加了我当前的故事板图片。前两个是自定义segues,中间两个是模态和推送,特定于需求。
Edit2:使用像else if ([sender selectedSegmentIndex] == 1){}
这样的方法找到正确的视图,但它不允许我切换回初始控制器 - 它重绘它失去了导航栏。
答案 0 :(得分:1)
在Xcode中,在“断点导航器”视图中添加“异常断点”。
启动您的应用,并尝试减少崩溃。
Xcode现在应该在导致崩溃的指令上停止。
所以现在当你停止时,尝试在调试区中键入po self
,以获得哪些类是接收器,它可以帮助你理解正在发生的事情...
答案 1 :(得分:1)
self
相当于大多数其他语言中的this
(java,php等...)。
这意味着当前的课程。
在MainViewController
如果您这样做:
[self performSegueWithIdentifier:@"leftSegue" sender:self];
与
相同[MainViewController performSegueWithIdentifier:@"leftSegue" sender:self];
答案 2 :(得分:0)
您从当前视图控制器到主视图控制器的segue可能未正确标记为“rightSegue”(或其他任何名称)。
在选择故事板segue时,在Xcode的右侧面板上,检查“标识符”字段是否标记正确。