ワークスペースに静的ライブラリがあります。その中に Apple.h & .m ファイルがあります .h ファイルで 2 つの @interface Apple を定義しました: NSObject & @interface GreenApple : NSObject
同じワークスペースに、この静的ライブラリを参照する別の iOS アプリケーション プロジェクトがあります。このアプリケーションで GreenApple を継承すると、デバイスとシミュレータ ビルドの両方で「未定義のシンボル」エラーが発生します。しかし、Apple から継承した場合はエラーになりません。
プロジェクト全体で、インポートされた .h と継承されたクラスは同じでなければなりません。または、Apple.h ファイルの下にあるにもかかわらず、私の GreenApple 継承は機能するはずですか?
編集
理論をテストするために、エラークラスに一致するようにファイルの名前を変更しましたが、それでも同じエラーです。実際の実装は、ファイル CMSGMealMenuItem.h から以下に示します。
@interface CMSGMealMenu : NSObject
@property (nonatomic, readonly) CMSGMealType mealType;
@property (nonatomic, readonly) NSDate *orderStartTime;
@property (nonatomic, readonly) NSDate *orderEndTime;
@property (nonatomic, readonly) NSArray *items;
@end
@interface CMSGMealMenuItem : NSObject
@property (nonatomic, readonly) NSString *itemId;
@property (nonatomic, readonly) NSString *itemDescription;
@property (nonatomic, readonly) NSString *itemSummary;
@property (nonatomic, readonly) NSNumber *itemPrice;
@end
CMSGMealMenuItem の継承は、.h ファイル名の一致が一致しないかどうかにかかわらず、常に未定義のシンボル エラーをスローします。しかし、それが CMSGMealMenu の定義とどのように違うのかわかりませんでしたか? それを継承してもエラーは発生しません。
編集
CMSGMealMenuItem をメソッド パラメーターとして参照しても、ビルド エラーは表示されず、継承した場合にのみエラーが表示されます。
これは機能します
@interface MSMealMenuItem : CMSGMealMenu
@property (nonatomic, retain) NSNumber *quantity;
@property (nonatomic, assign) BOOL isAddedToCart;
+ (MSMealMenuItem *) createMSMealMenuItemFromCMSGMealMenuItem:(CMSGMealMenuItem *)CMSGMealMenuItem;
@end
親を CMSGMealMenuItem に変更すると、以下のように未定義のシンボル エラーがスローされ、デバイスまたはシミュレーター用にビルドされます。
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_CMSGMealMenuItem", referenced from:
_OBJC_CLASS_$_MSMealMenuItem in MSMealMenuItem.o
"_OBJC_METACLASS_$_CMSGMealMenuItem", referenced from:
_OBJC_METACLASS_$_MSMealMenuItem in MSMealMenuItem.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)