Objective c 例如,消息的接收方类型X是转发声明,但类X的头被导入

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”例如消息是转发声明 在它上面的几行

我正在尝试修复此编译器错误:

例如,消息的接收方类型X是一个转发声明

该应用程序是一款带有情节提要的通用iOS应用程序。这个问题涉及三个VC类

从my RootTableViewController,应用程序可以切换到InfoScaledViewController或SubListViewController。 由于以下错误,编译失败

RootTableViewController.m:309:10:接收器类型“InfoScaledViewController”例如消息是转发声明

在它上面的几行中没有相应的错误,其中使用SubListViewController执行相同的过程

这两条线是:

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行会导致编译错误?