当我连接IBOutlet或IBAction时,为什么我的故事板无法使用自定义捆绑资源?

时间:2016-12-26 08:36:53

标签: ios objective-c frameworks storyboard bundle

我通过此tutorial执行自定义框架并捆绑资源。

有一个故事板(里面的ViewController)和捆绑资源中的图像。

如果我连接了任何ViewControllerIBOutlet,则会显示IBAction然后崩溃。 我确信UI对象的每个连接都没问题。

我尝试过使用xib,但效果很好。

这里是错误日志:

  

*由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[setValue:forUndefinedKey:]:   这个类不是关键的goButton编码兼容值。   * 第一次抛出调用堆栈:(0x244a391b 0x23c3ee17 0x244a3629 0x24c171f3 0x28d828b7 0x24c296d3 0x28ed3e9b 0x243ed1cb 0x28ed2bd1   0x28d85aa3 0x28b58ffb 0x28a1ea1f 0x28a1e971 0x292b3ec1 0x28d6ad01   0x28d8e6e5 0x28d90d25 0x28d90f91 0x28b17db9 0xd0b5 0x28a3714b   0x28aa7193 0x28aa7129 0x28cc75b1 0x28cd37db 0x24465d21 0x244657dd   0x24463d51 0x243b3229 0x243b3015 0x259a3ac9 0x28a87189 0xd2ed   0x2405b873)libc ++ abi.dylib:以未捕获的异常终止   输入NSException

错误前有警告:

  

Interface Builder文件中的未知类TestViewController。

这是我从捆绑资源的stroyboard中呈现viewcontroller的代码。

NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"XXXSDK" ofType:@"bundle"];
NSBundle *resourcesBundle = [NSBundle bundleWithPath:bundlePath];

UIStoryboard *resourcesStoryboard = [UIStoryboard storyboardWithName:@"Resources" bundle:resourcesBundle];
TestViewController *testVC = [resourcesStoryboard instantiateViewControllerWithIdentifier:@"TestViewController"];

[self presentViewController:testVC animated:YES completion:nil];

3 个答案:

答案 0 :(得分:3)

关于警告,你得到了:

  

Interface Builder文件中的未知类TestViewController。

有两种可能性:

  1. 您似乎没有为NIB / Storyboard ViewController指定类。请检查问题。
  2. 您的项目中添加了TestViewController.hTestViewController.m文件。但不知何故,您的文件可能会从Finder中删除。
    如果是这样,那么您可以使用 RED 文本颜色在项目中的xCode的ProjectNavigator中看到这两个文件。这意味着编译器期望的文件没有添加到您的项目中。
  3. 现在,如果您发现自己面临第二种情况,请转到“已删除邮件”,选择文件,右键单击并选择放回
    然后转到xCode项目,右键单击项目名称并选择将文件添加到“您的项目名称”
    我希望这能解决你的问题。

答案 1 :(得分:1)

谢谢@Er。维哈尔的回复。

解决我的问题,将-all_load -ObjC标志添加到Other Linker Flags

答案 2 :(得分:0)

从这句话中可以看出:此类不符合键值编码 - 关键字goButton 确保您的 goButton 正确地在您的班级中。检查您的故事板视图控制器,它是否具有与之关联的正确类。

你的xib可能连接不良。

我多次犯过这个错误。另一个常见原因是当您更改.h / .m中的IBOutlet属性的名称时,您已将其连接到笔尖中的文件所有者。

来自你的笔尖:

在IB中选择对象并转到' Connections Inspector'。 在'引用奥特莱斯'确保您的对象仍未连接到旧的媒体资源名称...如果是,请点击小的' x'删除引用并重新构建。

enter image description here

如果你使用Storyboard是另一个常见原因,你的UIButton可能有多个分配(解决方案几乎与nib相同):

打开故事板并右键单击UIButton 您将看到此按钮有多个assign / ref。删除其中一个" Main ..."使用小" x":

的灰色窗口

enter image description here