Swift:访问存在的属性时“无法识别的选择器”

时间:2017-10-03 17:38:49

标签: ios objective-c swift

我正在导入一个用Objective C编写的旧库作为我的Swift项目中的子模块。 当尝试访问该库的对象的属性时,应用程序崩溃并出现“无法识别的选择器”异常。

这是Objective C类的代码:

@interface MotionzoneItem : NSObject<NSCopying>

@property (nonatomic, copy) NSString *title;
@property (nonatomic, readonly) NSString *describe;
@property (nonatomic, assign) BOOL move, enabled;
@property (nonatomic, assign) CGRect frame;
@property (nonatomic, readonly) CGPoint point0, point1, point2, point3;
@property (nonatomic, readonly) CGPoint leftTop, rightTop, rightBottom, leftBottom;
@property (nonatomic, readonly) CGPoint selectedPoint;
@property (nonatomic, strong) UIColor *handleColor;
@property (nonatomic, assign) NSUInteger index;

- (CGPoint)getSelectedPointWithRect:(CGRect)targetFrame;
- (CGRect)getCircleFrameWithPoint:(CGPoint)targetPoint;
- (void)updateFrame:(CGPoint)targetPoint;
- (void)resetItem;

@end

如果我检查生成的Swift类,我们可以看到相同的属性:

open class MotionzoneItem : NSObject, NSCopying {

open var title: String!
open var describe: String! { get }
open var move: Bool
open var enabled: Bool
open var frame: CGRect
open var point0: CGPoint { get }
open var point1: CGPoint { get }
open var point2: CGPoint { get }
open var point3: CGPoint { get }
open var leftTop: CGPoint { get }
open var rightTop: CGPoint { get }
open var rightBottom: CGPoint { get }
open var leftBottom: CGPoint { get }
open var selectedPoint: CGPoint { get }
open var handleColor: UIColor!
open var index: UInt

open func getSelectedPoint(with targetFrame: CGRect) -> CGPoint
open func getCircleFrame(with targetPoint: CGPoint) -> CGRect
open func updateFrame(_ targetPoint: CGPoint)
open func resetItem()

}

一切似乎都没问题,但是在代码中,当我尝试执行此命令时:

let motionzoneItem: MotionzoneItem = MotionzoneItem.init()
motionzoneItem.handleColor = UIColor.red

异常被解雇:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MotionzoneItem handleColor]: unrecognized selector sent to instance 0x1742ed700'

如果我通过检查器检查对象,我可以看到对象中没有包含很多属性:

Inspector debug

其他属性在哪里,例如 handleColor title ???

谢谢!

注意:如果我执行用Objective C而不是Swift编写的相同代码,它就可以工作。

1 个答案:

答案 0 :(得分:1)

<强>固定

最后,清理项目并删除Derived Data文件夹中的所有内容可以解决问题。现在一切都按预期工作,我可以看到所有的MotionzoneItem属性。

对于由此带来的不便表示歉心,非常感谢您的帮助。