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



更新

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

原始

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

在我的一个选项卡中,如果我将手势识别器(任何,但假设为平移)拖到控件上,然后将选择器设置为一个动作,那么我一转到该选项卡,它就会崩溃。

控制台中没有任何内容——它似乎是在加载情节提要时发生的(从未调用viewDidLoad)。

  1. 我不知道如何获得更多信息
  2. 在另一个选项卡上,这很好。这两个选项卡都是自动生成的

(有可能我在视图中搞砸了什么,但我不知道自己做了什么)。

如果我以编程方式做出手势,它们会很好地工作,但能在故事板中工作是很好的,我担心无论出了什么问题,都会在某个时候以其他方式导致崩溃。

更多信息

在模拟器中我得到

-[__NSCFString setView:]: unrecognized selector sent to instance 0x6d2db70

同样,需要调试技术——例如,有没有办法找出对象0x6d2db70是什么?

这正是这个问题(没有答案):

界面生成器中的手势识别器使我的应用崩溃

更多信息

这对于再现来说是微不足道的

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

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

错误消息告诉我们程序正在向__NSCFString的实例发送setView:消息(这显然是NSString的私有实现类)。

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

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

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

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

在设备上,你可以这样做:

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

更新

根据您的复制步骤,这是UIKit中的一个错误。提交错误报告。您可以通过在SecondViewController上创建一个强大的出口并将其连接到手势识别器来解决这个错误 确保在viewDidUnload中将出口设置为零

更新

永远不要将你的出口设置为零——错误的一部分是UIKit没有保留——你需要保留你的引用,以确保识别器不会被释放。

在我的例子中,当通过在代码中拖动为手势识别器自动创建IBOutlet时,Xcode正确地创建了具有"strong"属性的属性,但它也在viewDidUnload中添加了"set to nil"。删除"设置为零"为我解决了这个问题。

相关内容

  • 没有找到相关文章

最新更新