Objective c 例如,消息的接收方类型X是转发声明,但类X的头被导入
我正在尝试修复此编译器错误: 例如,消息的接收方类型X是一个转发声明 该应用程序是一款带有情节提要的通用iOS应用程序。这个问题涉及三个VC类 从my RootTableViewController,应用程序可以切换到InfoScaledViewController或SubListViewController。 由于以下错误,编译失败 RootTableViewController.m:309:10:接收器类型“InfoScaledViewController”例如消息是转发声明 在它上面的几行中没有相应的错误,其中使用SubListViewController执行相同的过程 这两条线是:Objective c 例如,消息的接收方类型X是转发声明,但类X的头被导入,objective-c,import,compiler-errors,Objective C,Import,Compiler Errors,我正在尝试修复此编译器错误: 例如,消息的接收方类型X是一个转发声明 该应用程序是一款带有情节提要的通用iOS应用程序。这个问题涉及三个VC类 从my RootTableViewController,应用程序可以切换到InfoScaledViewController或SubListViewController。 由于以下错误,编译失败 RootTableViewController.m:309:10:接收器类型“InfoScaledViewController”例如消息是转发声明 在它上面的几行
SubListViewController *destCntrlr =
(SubListViewController *)segue.destinationViewController;
及
如果我注释掉导致此编译错误的行并在该位置设置断点,您可以从下面的屏幕截图中看到,为什么我对错误感到困惑
如您所见,我在RootTableViewController.m和@class InfoScaledViewController中使用了import InfoScaledViewController.h
在RootTableViewController.h中
我已经阅读了许多针对这个错误的答案。没有人帮了忙
文件:InfoScaledViewController.h
#import <UIKit/UIKit.h>
#import "BNRDynamicTypeManagedLabel.h"
...
@interface InfoScaledViewController : UIViewController <UIAlertViewDelegate> {
BOOL pushedForImport;
...
}
@property (nonatomic, assign) BOOL pushedForImport;
...
@end //InfoScaledViewController.h
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@interface SubListViewController : CoreDataTVC < UITableViewDelegate,UITableViewDataSource,UIAlertViewDelegate, AddRecipeDelegate,EditRecipeDelegate,UISearchBarDelegate,UITextFieldDelegate> {
//...
BOOL isNewPush;
}
//...
@property (nonatomic,assign) BOOL isNewPush;
//...
@end //SubListViewController.h
#import <UIKit/UIKit.h>
...
// #import "InfoScaledViewController.h"
@class InfoScaledViewController;
@class SubListViewController;
//...
@interface RootTableViewController : CoreDataTVC
< NameViewDelegate,UIAlertViewDelegate, UITableViewDataSource, UITableViewDelegate >
{
//...
SubListViewController *subListViewController;
InfoScaledViewController* infoViewController;
//...
}
@property (nonatomic, strong) SubListViewController *subListViewController;
@property (nonatomic, strong) InfoScaledViewController * infoViewController;
...
@end
文件:SubListViewController.h
#import <UIKit/UIKit.h>
#import "BNRDynamicTypeManagedLabel.h"
...
@interface InfoScaledViewController : UIViewController <UIAlertViewDelegate> {
BOOL pushedForImport;
...
}
@property (nonatomic, assign) BOOL pushedForImport;
...
@end //InfoScaledViewController.h
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@interface SubListViewController : CoreDataTVC < UITableViewDelegate,UITableViewDataSource,UIAlertViewDelegate, AddRecipeDelegate,EditRecipeDelegate,UISearchBarDelegate,UITextFieldDelegate> {
//...
BOOL isNewPush;
}
//...
@property (nonatomic,assign) BOOL isNewPush;
//...
@end //SubListViewController.h
#import <UIKit/UIKit.h>
...
// #import "InfoScaledViewController.h"
@class InfoScaledViewController;
@class SubListViewController;
//...
@interface RootTableViewController : CoreDataTVC
< NameViewDelegate,UIAlertViewDelegate, UITableViewDataSource, UITableViewDelegate >
{
//...
SubListViewController *subListViewController;
InfoScaledViewController* infoViewController;
//...
}
@property (nonatomic, strong) SubListViewController *subListViewController;
@property (nonatomic, strong) InfoScaledViewController * infoViewController;
...
@end
文件:RootTableViewController.h
#import <UIKit/UIKit.h>
#import "BNRDynamicTypeManagedLabel.h"
...
@interface InfoScaledViewController : UIViewController <UIAlertViewDelegate> {
BOOL pushedForImport;
...
}
@property (nonatomic, assign) BOOL pushedForImport;
...
@end //InfoScaledViewController.h
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@interface SubListViewController : CoreDataTVC < UITableViewDelegate,UITableViewDataSource,UIAlertViewDelegate, AddRecipeDelegate,EditRecipeDelegate,UISearchBarDelegate,UITextFieldDelegate> {
//...
BOOL isNewPush;
}
//...
@property (nonatomic,assign) BOOL isNewPush;
//...
@end //SubListViewController.h
#import <UIKit/UIKit.h>
...
// #import "InfoScaledViewController.h"
@class InfoScaledViewController;
@class SubListViewController;
//...
@interface RootTableViewController : CoreDataTVC
< NameViewDelegate,UIAlertViewDelegate, UITableViewDataSource, UITableViewDelegate >
{
//...
SubListViewController *subListViewController;
InfoScaledViewController* infoViewController;
//...
}
@property (nonatomic, strong) SubListViewController *subListViewController;
@property (nonatomic, strong) InfoScaledViewController * infoViewController;
...
@end
RootTableViewController.m中发生错误的位置如下所示
注意:Xcode同时识别SubListViewController和InfoScaledViewController类,赋予两个名称相同的颜色
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([segue.identifier isEqualToString:@"SLVC"]) {
SubListViewController *destCntrlr
= (SubListViewController *)segue.destinationViewController;
[destCntrlr setIsNewPush:YES]; // NO ERROR HERE
...
}else if ([segue.identifier isEqualToString:@"INFO"]){
InfoScaledViewController *destCntrlr
= (InfoScaledViewController *)segue.destinationViewController ;
[destCntrlr setPushedForImport:(sender == nil) ? YES : NO]; // ERROR HERE breakpoint is here
...
}
else if ([segue.identifier isEqualToString:@"ADDCATEGORY"]){
...
}
}
您需要在RootTableViewController.m中导入SubListViewController.h和InfoScaledViewController.h。此外,当您声明属性时,您也不需要声明IVAR,也不需要@synthesis这些IVAR。所有这些在你申报财产时都会处理好。这与您的问题无关,这只是编写现代Objective-C的最佳实践。@AdamPro13在他为RootTableViewController.m编写的代码中说,他已经导入了这些文件。这很奇怪,因为我同意这应该可以解决问题。在我看来,他正在展示它。是否尝试清理项目?除了RootTableViewController.h的第三行之外,没有任何导入行被注释。非常感谢你的阅读。我脑海中的中心问题是,应用程序如何运行到//ERROR HERE行,并知道destCntrlr是InfoScaledViewController的一个实例,而紧随其后的那行ERROR HERE行会导致编译错误?