Objective-C应用程序中缺少Swift框架中的IBOutlet属性

时间:2014-06-23 01:40:46

标签: ios objective-c frameworks swift

我有一个我在Swift中编写的框架,其中包含一个扩展UIView且具有IBOutlet属性的类。

从我的Objective-C应用程序可以看到该类,但Interface Builder无法看到IBOutlet。这是代码:

@objc protocol MyFrameworkDelegate {
    // My delegate methods here
    ...
}

@objc class MyFrameworkClass: UIView {

    @objc @IBOutlet var delegate:MyFrameworkDelegate?
    // The rest of my class here
    ...
}

我在我的故事板中将我的观看课程设置为MyFrameworkClass,但delegate插座没有显示。

我尝试使用和不使用@objc修饰符,没有运气。当我从Objective-C检查我的类时,属性出现时没有IBOutlet

其他人遇到过类似的事情吗?

修改

这是Xcode为Swift生成的代码 - > Objective-C转换:

@protocol MyFrameworkDelegate;

SWIFT_CLASS("_Nc9a0xD6MyFrameworkClass")
@interface MyFrameworkClass : UIView
@property (nonatomic) id <MyFrameworkDelegate> delegate;
...

此外,这是我尝试运行应用时收到的错误消息:

2014-06-22 21:41:59.095 MyApp Test[75211:17812266] Unknown class MyFrameworkClass in Interface Builder file.
2014-06-22 21:41:59.099 MyApp Test[75211:17812266] -[UIView setDelegate:]: unrecognized selector sent to instance 0xcf5d650
2014-06-22 21:41:59.101 MyApp Test[75211:17812266] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView setDelegate:]: unrecognized selector sent to instance 0xcf5d650'

修改

这是我的故事板的截图:

enter image description here

4 个答案:

答案 0 :(得分:3)

您的模块为None,您应该将其选为相应的值。

答案 1 :(得分:0)

  

reason: '-[UIView setDelegate:]: unrecognized selector

这使得有问题的对象看起来像是UIView的实例,而不是MyFrameworkClass。检查IB中对象的类型。

答案 2 :(得分:0)

我怀疑委托这个词本身正在触发某种潜在的错误/机制/漏洞抽象。

如何将其称为myFrameworkDelegate?

我也想知道从IB推送是否总是不能总是给出最好的结果但是我需要启动Xcode 6并首先手动测试以查看会发生什么。新技术:)

答案 3 :(得分:0)

而不是

@objc @IBOutlet var delegate:MyFrameworkDelegate?

使用

@IBOutlet var delegate:AnyObject?

你可以将你的班级链接到这个属性。