在StoryBoard中使用手势识别器时崩溃

Lou*_*nco 10 iphone objective-c interface-builder ios xcode-storyboard

UPDATE

对于旧版本的Xcode来说,这是一个老问题.事实证明,问题是Xcode中的一个错误已被修复.

原版的

我有一个故事板生成一个新的标签iPhone应用程序(与ARC)

在我的一个标签中,如果我将一个手势识别器(任何,但让我们说Pan)拖到控件上,然后将选择器设置为一个动作,它就会在我转到选项卡时立即崩溃.

控制台中没有任何内容 - 在加载故事板时似乎正在发生(从未调用viewDidLoad).

  1. 我无法弄清楚如何获取更多信息
  2. 在另一个选项卡上,这很好.两个选项卡都是自动生成的

(我可能在视图中弄乱了一些东西,但我没有弄清楚我做了什么).

如果我以编程方式制作手势,它们可以正常工作,但是让它在故事板中工作很好,而且我担心任何错误都会在某些方面导致崩溃.

更多信息

在我得到的模拟器中

-[__NSCFString setView:]: unrecognized selector sent to instance 0x6d2db70
Run Code Online (Sandbox Code Playgroud)

再次,需要调试技术 - 例如,有没有办法找出0x6d2db70是什么对象?

这与这个问题完全一样(没有答案):

"界面"构建器中的手势识别器会崩溃我的应用程序

更多信息

重现这一点很简单

  1. 新的iPhone标签应用程序,ARC和Storyboard on
  2. 将点按手势拖动到第二个标签的视图上(适用于第一个标签)
  3. 创建(IBAction)
  4. 将手势的选择器连接连接到#3的操作
  5. 运行,转到第二个选项卡

崩溃.与我的应用程序相同,默认选项卡有效,其他选项卡则无效

rob*_*off 9

错误消息告诉我们程序正在将setView:消息发送到一个实例__NSCFString(显然是私有实现类NSString).

确保您已尝试在启用僵尸的情况下运行.僵尸很容易导致无法识别的选择器错误.

如果它不是僵尸,请设置一个断点-[NSObject doesNotRecognizeSelector:].当断点被击中时,您可能只能从堆栈跟踪中找出问题.如果没有,您可以打印debugDescription对象(与description大多数类相同).

在模拟器上,您可以要求调试器打印对象,debugDescription如下所示:

(gdb) frame 0
#0  0x013bcbff in -[NSObject doesNotRecognizeSelector:] ()
(gdb) po ((int*)$ebp)[2]
this is my test string
Run Code Online (Sandbox Code Playgroud)

在设备上,您执行此操作:

(gdb) frame 0
#0  0x344bca22 in -[NSObject doesNotRecognizeSelector:] ()
(gdb) po $r0
this is my test string
Run Code Online (Sandbox Code Playgroud)

更新

根据您的重现步骤,这是UIKit中的一个错误. 提交错误报告. 您可以通过创建强大的插座SecondViewController并将其连接到手势识别器来解决该问题. 确保将插座设置为nil in viewDidUnload.

更新

不要将你的插座设置为零 - 部分错误是UIKit没有保留 - 你需要保留你的参考以确保不释放识别器.

  • 哇!我也遇到过这个问题,直到我查看了Organizer中的设备日志,发现didNotRecognizeSelector是由我设法找到此页面的滑动引起的.我有同样的问题,上面的修复工作(只需按住Ctrl键并将滑动手势拖动到支持视图控制器的头文件并使其成为强插座 - 问题解决了).谢谢! (2认同)