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
Iが生成スウィフトクラスを確認した場合、我々は同じプロパティを見ることができます:
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()
}
すべてがOKのようです、しかし、その後、私はこのコマンドを実行しようとするコードに:0123:
let motionzoneItem: MotionzoneItem = MotionzoneItem.init()
motionzoneItem.handleColor = UIColor.red
例外が言って発射されます
そして私はインスペクタを介して被写体を確認した場合、私は、オブジェクトに含まれていないプロパティがたくさんあります見ることができます:他のプロパティがある
、handleColorまたは等がタイトル ???
ありがとうございます!
注:私はSwiftの代わりにObjective Cで書かれた同じコードを実行すると動作します。終わり
Hmm。その場合には、 - [MotionzoneItem setHandleColor:]:unrecognized selector to ... "というメッセージが表示されることがありますので注意してください(エラーの' handleColor'ではなく 'setHandleColor'です。 )。エラーは 'handleColor'を見つけることができないと言っていますが、あなたはこの行でそれを呼んでいません。 'setHandleColor'を呼び出しています... – Rob
キーは' ' - [MotionzoneItem handleColor]にあります:'もっとコードを表示すると助けになると思いますか? – Glenn
私たちがそれを再現できない場合は、私たちがあなたを助けることが難しいので、私は[最小、再現性があり、検証可能な例](https://stackoverflow.com/help/mcve)を作成することをお勧めします。そして、我々は 'MotionzoneItem'の全てを見る必要はありません。プロジェクトのコピーを作成し、無関係なもの( 'handleColor'関連のもの以外のすべて)を整理して、問題を再現できることを確認します。 – Rob