目标C,由于循环依赖导致的Swift互操作性问题

时间:2015-07-20 07:28:26

标签: ios objective-c swift circular-dependency

我正在开发一个几年前在Objective C中完成的iOS项目。所以我要为现有的一个实现一些新功能,所以这次我使用Swift来实现那个目的。

我添加了一个新的Swift类:

class CampView: UIView
{
   // Code
}

我想在我现有的Objective C类中访问这个类。所以我喜欢:

@class CampView;
@interface NewCampViewController : UIViewController

@property (nonatomic, strong) IBOutletCollection(CampView) NSArray *campTypes;

@end

但是当我将它连接到我的故事板时,它会崩溃并显示一条消息:

  

因未捕获的异常终止应用' NSUnknownKeyException',   原因:' [setValue:forUndefinedKey:]:   对于关键的campTypes,此类不符合键值编码。'

此外,我无法将系统生成的Swift头文件导入此特定类,当我这样做时会抛出如下错误:

  

' MyApp的-Swift.h'找不到文件

这就是为什么我在上面的代码段中使用@class CampView;的原因。在调查时我发现我的NewCampViewController.h包含在Objective C桥接标题中。所以怀疑这是由于循环依赖,但我还无法修复它。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:6)

1)您是否正在从Objective-C类的.m文件中导入(import "MyApp-Swift.h")?这应避免循环依赖。如果您正在使用@class CampView,Xcode希望您将在.m文件中导入CampView类。 @class基本上只是头文件的强制转换。

如果您在执行-swift.h导入时找不到文件错误,请通过查看此this question来尝试调试。此外,我相信如果您更改项目的名称,导入名称可能不会随之更改。检查模块的名称。

如果您仍然认为有可能从圆形导入中找不到此文件的问题,那么最简单的方法就是将导入添加到您知道不会有的另一个obj-c文件中循环调用,并初始化CampView的测试实例。

2)如果问题是@ Paulw11建议的,IB中的连接,您可以通过检查检查代码中连接的属性旁边的圆点来检查是否建立了连接。单击它应该显示它连接到的内容。未连接空点。 enter image description here 有关如何在代码中正确建立从IB到属性的连接的详细信息,请参阅post

相关问题