iOS 6故事板SEGUE带有风格的弹出式弹出式,带有UipopoverController Target崩溃



我有一个带有主viewController的iPad应用程序,在其中,我有一个Uibutton。这与带有样式弹出式的segue绑定了,带有uipopoverController类的目标(空,来自Xcode的" Create new",使用UipopopoverController子类)。

当我单击按钮时,segue执行并崩溃:

2012-12-22 16:58:57.275 iAmFrustratedApp[11521:c07] -[MyGreatPopoverController initWithCoder:]: unrecognized selector sent to instance 0x1caabe70
2012-12-22 16:58:57.277 iAmFrustratedApp[11521:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MyGreatPopoverController initWithCoder:]: unrecognized selector sent to instance 0x1caabe70'
*** First throw call stack:
(0x22fe012 0x148fe7e 0x23894bd 0x22edbbc 0x22ed94e 0x5f3ae9 0x702a02 0x7020e5 0x5f367b 0x702a02 0x702418 0x7020e5 0x5f2aa3 0x81e48a 0x81ea83 0x81eb54 0x14a3705 0x3da920 0x3da8b8 0x49b671 0x49bbcf 0x49ad38 0x40a33f 0x40a552 0x3e83aa 0x3d9cf8 0x1bacdf9 0x2281f3f 0x228196f 0x22a4734 0x22a3f44 0x22a3e1b 0x1bab7e3 0x1bab668 0x3d765c 0x1cbd 0x1be5)
libc++abi.dylib: terminate called throwing an exception

有趣的是,我曾经让这个目标是普通的uiviewController。当那个课程时,这正常工作,除了我无法以任何方式以任何方式解雇弹出案。这是我将目标类切换为uipopopoverController的唯一原因。

来自nscoding协议参考:

Nscoding协议声明了类必须实现的两种方法,以便可以对该类的实例进行编码和解码。此功能为归档提供了基础(在磁盘上存储对象和其他结构)和分布(将对象复制到不同的地址空间)。

编码器通过调用encodeWithCoder:或initwithCoder:。指示对象这样做。codewithCoder:指示对象将其实例变量编码为提供的编码器;对象可以多次接收此方法。initwithCoder:指示对象从编码器提供的数据中初始化自身;因此,它替换了任何其他初始化方法,并且每个对象仅发送一次。任何应该编码的对象类都必须采用NSCODING协议并实施其方法。

XIB文件只是由编码对象制成的存档。加载XIB时,框架将它们解码(通过initWithCoder)将其解码为填充应用程序的对象。

现在,碰巧的是UIPopoverController不符合NSCoding协议(请参阅参考文档,就在开始时,它说:"符合&quots;

但是:

任何应编码的对象类都必须采用NSCoding协议并实现其方法。

因此,当框架找到您UIPopoverController派生的类实例并尝试解码时,它会失败。

希望这会澄清它。

最新更新