当我连接 IBOutlet 或 IBAction 时,为什么我的情节提要无法通过自定义包资源运行?

Why my storyboard doesn't work from custom bundle resources when I connected IBOutlet or IBAction?

我用这个 tutorial 做了一个自定义框架和捆绑资源。

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

我显示 ViewController 然后崩溃,如果我连接任何 IBOutletIBAction。 我确定 UI 对象的每个连接都很好。

我试过使用 xib 并且效果很好。

这里是错误日志:

* Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key goButton.' * First throw call stack: (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: terminating with uncaught exception of type NSException

错误前有警告:

Unknown class TestViewController in Interface Builder file.

这是我从捆绑资源的演示板上 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];

根据此声明:此 class 不是密钥 goButton 的键值 coding-compliant 请确保您的 goButton 在您的 class 中是正确的。检查你的故事板视图控制器,它是否有正确的 class 与之关联。

您的 xib 可能连接有问题。

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

来自你的笔尖:

Select IB 中的对象并转到 'Connections Inspector'。 在 'Referencing Outlets' 下确保您的对象没有仍然连接到旧的 属性 名称...如果是,请单击小的 'x' 删除引用并重新构建。

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

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

关于您收到的警告:

Unknown class TestViewController in Interface Builder file.

有两种可能:

  1. 你的NIB/Storyboard好像没有指定classViewController.Please检查问题
  2. 您已将 TestViewController.hTestViewController.m 文件添加到您的项目中。但不知何故,您的文件可能会从 Finder 中删除。
    如果是这样,那么您可以在项目的 xCode 的 ProjectNavigator 中看到带有 RED 文本颜色的两个文件。这意味着您的项目中没有添加编译器期望的文件。

现在,如果您发现自己面临第二种情况,请转到垃圾箱,select 您的文件,右键单击并 select 放回
然后转到您的 xCode 项目,右键单击您的项目名称并 select Add File to "Your Project Name".
我希望这能解决您的问题。

谢谢@Er。 Vihar 的回复。

我的问题的解决方法是将 -all_load -ObjC 标记添加到 Other Linker Flags