我正在导入一个用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'
如果我通过检查器检查对象,我可以看到对象中没有包含很多属性:
其他属性在哪里,例如 handleColor 或 title ???
谢谢!
注意:如果我执行用Objective C而不是Swift编写的相同代码,它就可以工作。
答案 0 :(得分:1)
<强>固定强>
最后,清理项目并删除Derived Data文件夹中的所有内容可以解决问题。现在一切都按预期工作,我可以看到所有的MotionzoneItem属性。
对于由此带来的不便表示歉心,非常感谢您的帮助。