我的工作空间中有一个静态库。其中有 Apple.h 和 .m 文件 在 .h 文件中我定义了两个@interface Apple:NSObject 和@interface GreenApple:NSObject
在同一个工作空间中,我有另一个引用这个静态库的 iOS 应用程序项目。在此应用程序中,当我继承 GreenApple 时,设备和模拟器构建都会出现“未定义符号”错误。但是,如果我从 Apple 继承,则没有错误。
跨项目导入的 .h 和继承的类必须相同还是我的 GreenApple 继承应该在 Apple.h 文件下工作?
编辑
为了测试理论,我重命名了文件以匹配错误类,但仍然是相同的错误。下面从文件 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 文件名是否匹配。但是,我无法发现这与 CMSGMalMenu 定义有何不同?如果从它继承,它不会引发任何错误。
编辑
将 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)