【发布时间】:2026-02-05 19:20:13
【问题描述】:
我是 iOS 开发的新手,我正在使用 John Lluch 著名的 SWRevealViewController 实现滑出式菜单。我正在关注这个视频教程:
https://www.youtube.com/watch?v=5SUV1YY2yxQ
到目前为止,我有这个故事板:
初始场景(Reveal View Controller)试图自动触发前两个 segues(到 Table View 和 Navigation Controller)。
当我构建应用程序时,我收到以下错误:
[SWRevealViewController initWithIdentifier:source:destination:]: 无法识别的选择器发送到实例 0x7d96f000
此错误发生在我在下面指出的行中,在 SWRevealViewController.m 中的“loadStoryboardControllers”方法中(这是我在情节提要上的初始“RevealViewController”场景的类)
- (void)loadStoryboardControllers
{
if ( self.storyboard && _rearViewController == nil )
{
//Try each segue separately so it doesn't break prematurely if either Rear or Right views are not used.
@try
{
//**ERROR OCCURS ON FOLLOWING LINE**
[self performSegueWithIdentifier:SWSegueRearIdentifier sender:nil];
}
@catch(NSException *exception) {}
@try
{
//**ANOTHER ALMOST IDENTICAL ERROR OCCURS ON FOLLOWING LINE**
[self performSegueWithIdentifier:SWSegueFrontIdentifier sender:nil];
}
@catch(NSException *exception) {}
@try
{
[self performSegueWithIdentifier:SWSegueRightIdentifier sender:nil];
}
@catch(NSException *exception) {}
}
}
发生错误时,'SWSegueRearIdentifier'的值为@"sw_rear",正确。这是我给 segue 的标识符。 SWRevealViewController 的工作方式是它首先查找标识为“sw_rear”的segue,以便自动触发它。
什么可能导致错误,或者我可以做些什么来进一步调试?
【问题讨论】:
-
方法
initWithIdentifier:source:destination:在哪里调用?基本上例外是说SWRevealViewController类没有实现该方法 -
我不得不说 try/catch 代码非常难看。最好只调用你知道你将拥有的 segues
-
我在一个完全不同的类中定义了一个 initWithIdentifier 方法,用于在不同的故事板之间执行转场。我在第一个实例中所做的是通过加载屏幕连接到我的故事板,但是当我调试时,似乎没有调用 initWithIdentifier 方法,我不明白为什么此时会调用它我在哪里得到错误?
-
您需要查看抛出异常时的堆栈跟踪并找出调用该方法的方法。你的代码认为它应该处理不同的对象类但实际上有
SWRevealViewController -
不是那个类被调用,而是一些其他代码正在执行认为它正在调用那个类,这就是你得到一个无法识别的选择器的原因
标签: ios objective-c storyboard segue