1. ホーム
  2. objective-c

[解決済み] インスタンスに送信されたセレクタが認識されない」を解決するには?

2022-03-13 01:31:46

質問

AppDelegateで、スタティックライブラリで定義されたインスタンスを確保しています。 このインスタンスには、NSStringプロパティが"copy"で設定されています。 このインスタンスのstringプロパティにアクセスすると、「unrecognized selector sent to instance」と表示されてアプリがクラッシュする。 Xcodeは、このプロパティのコードヒントを提供します。これは、呼び出し側のアプリでそれが知られていることを意味します。特定のクラスは、静的ライブラリターゲットにコンパイルされています。何が足りないのでしょうか?

コードを追加する

//static library 
//ClassA.h
@interface ClassA : NSObject {
...
NSString *downloadUrl;
}
@property(nonatomic, copy) NSString *downloadUrl;

//ClassA.m
@synthesize downloadUrl;

呼び出し元のアプリのappDelegateで。

//app delegate header file
@interface myApp : NSObject <UIApplicationDelegate> {
ClassA *classA;
}
@property (nonatomic, retain) ClassA *classA;

//app delegate .m file
@synthesize classA;

- (void)applicationDidFinishLaunching:(UIApplication *)application {
classA = [[ClassA alloc] init];
//exception occurs here.  downloadUrl is of type NSCFNumber
classA.downloadUrl = @"http://www.abc.com/";
...}

アプリ内の他のクラスは、デリゲートへの参照を取得し、classA.downloadUrlを呼び出します。

どのように解決するのですか?

1) 合成は @implementation ブロックを作成しましたか?

2)参照すべきは self.classA = [[ClassA alloc] init];self.classA.downloadUrl = @"..." の代わりに、プレーンな classA ?

3) あなたの myApp.m ファイルをインポートする必要があります。 ClassA.h それがない場合、デフォルトは数字かポインタになるのでしょうか?(Cの変数ではコンパイラが見つけないとintがデフォルトになります)。

#import "ClassA.h" .