在添加了:(Id)发送者之后,我在这个例程中遇到了崩溃,这样我就可以确定是哪个按钮调用了它。当设置为普通的老式toggleView3时,它可以完美地工作。当将detailView切换回docView时,会发生崩溃。
'NSInvalidArgumentException', reason: '*** -[RootViewController toggleView3]: unrecognized selector sent to instance 0x524a00' 2009-04-07 12:29:44.421 eTarot[11405:20b] Stack:
-(IBAction)toggleView3:(id)sender{
if (detailViewController == nil) {
[self loadDetailViewController];
}
UIView *docView = docViewController.view;
UIView *detailView = detailViewController.view;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1];
[UIView setAnimationTransition:([docView superview] ? UIViewAnimationTransitionFlipFromRight : UIViewAnimationTransitionFlipFromLeft) forView:self.view cache:YES];
if ([docView superview] != nil) {
[detailViewController viewWillAppear:YES];
[docViewController viewWillDisappear:YES];
[docView removeFromSuperview];
[self.view addSubview:detailView];
[self.view insertSubview:detailNavigationBar aboveSubview:detailView];
[docViewController viewDidDisappear:YES];
[detailViewController viewDidAppear:YES];
} else {
[docViewController viewWillAppear:YES];
[detailViewController viewWillDisappear:YES];
[detailView removeFromSuperview];
[detailNavigationBar removeFromSuperview];
[self.view addSubview:docView];
[detailViewController viewDidDisappear:YES];
[docViewController viewDidAppear:YES];
}
[UIView commitAnimations];
}发布于 2009-04-07 17:33:16
当选择器的正确名称是toggleView3: -即带有冒号和参数时,您将向视图发送消息toggleView3。它们可能看起来与你很相似,但它们与Objective-C完全不同。
发布于 2009-04-07 17:31:10
该异常意味着您的应用程序在调用toggleView3时没有在某处使用:sender参数。由于您的新方法需要一个参数,因此它与调用一个从未存在的方法是一样的。
如果您查看调试器中的堆栈跟踪,它应该非常清楚它来自哪里。在构建结果中可能也有一个警告。
https://stackoverflow.com/questions/726727
复制相似问题