Objective c 不一致';未知类型名称';协议引用NSManagedObject子类时出错
我在我的项目中声明了两个协议。我写的第一个名为Objective c 不一致';未知类型名称';协议引用NSManagedObject子类时出错,objective-c,ios5,xcode4,protocols,nsmanagedobject,Objective C,Ios5,Xcode4,Protocols,Nsmanagedobject,我在我的项目中声明了两个协议。我写的第一个名为SSSelectingCategory.h #import <Foundation/Foundation.h> @protocol SSSelectingCategory <NSObject> @required @property (nonatomic, strong) SSCategory *selectedCategory; @end 奇怪的是,第一个协议编译时没有任何错误或警告,而第二个协议抛出了未知类型名“S
SSSelectingCategory.h
#import <Foundation/Foundation.h>
@protocol SSSelectingCategory <NSObject>
@required
@property (nonatomic, strong) SSCategory *selectedCategory;
@end
奇怪的是,第一个协议编译时没有任何错误或警告,而第二个协议抛出了未知类型名“SSIcon”
我知道这个问题的答案是在我的第二个协议中使用转发类声明,如下所示:
#import <Foundation/Foundation.h>
@class SSIcon;
@protocol SSSelectingIcon <NSObject>
@required
@property (nonatomic, strong) SSIcon *selectedIcon;
@end
#导入
@SSIcon类;
@协议选择图标
@必需的
@性质(非原子,强)SSIcon*selectedIcon;
@结束
但是现在这让我觉得SSSelectingCategory.h
协议本来就不应该编译,因为我没有提出任何明确的#导入
或任何类型的前向类声明
我可以让编译器安静下来继续编码,但我想知道Xcode是否有什么奇怪的地方,或者我是否遗漏了一些细节,因为这两个协议都非常简单。
SSCategory
和/或SSIcon
类是否有问题,因为它们都是NSManagedObject
s,并且两者之间存在联系?编译器编译.m文件,其中又包括.h文件
因此,我假设在包含“SSSelectingCategory.h”的.m文件中,SSCategory
是在前面定义的,因此编译器在编译协议时没有问题
另一方面,如果包含“SSSelectingIcon.h”而之前没有定义SSIcon
,编译器将中止,并在那里出错
在任何情况下,在.h文件中包含所需的接口(或向前声明所需的类)都是有意义的,因为这样可以在Xcode中完成代码。谢谢Martin R,正如您所描述的那样。又一个教训!
#import <Foundation/Foundation.h>
@class SSIcon;
@protocol SSSelectingIcon <NSObject>
@required
@property (nonatomic, strong) SSIcon *selectedIcon;
@end