Xcode中的未知类型名称(即使使用@class声明)

时间:2012-12-28 01:05:23

标签: objective-c ios xcode

我在设置数据控制器的简单应用程序时遇到问题。我在BirdsListViewController.h中的行@property (strong, nonatomic) BirdsListDataController *dataController;上收到错误。我尽力使用BirdsListDataController的@class声明,并尝试从.h文件中删除任何#import语句,并尝试删除一个循环#import,你可以在BirdsListViewController的顶部找到它。 H。我猜这很简单。

BirdsListViewController.h

#import <UIKit/UIKit.h>
@class BirdsListDataController;

@interface BirdsListViewController : UITableViewController <UITextFieldDelegate>
{
// NSMutableArray *listOfBirds;
IBOutlet UITextField *addNewBirdTextField;

}
//@property (nonatomic, retain) NSIndexPath *checkedIndexPath;
@property (nonatomic, retain) NSString *textLabelContents;
@property (nonatomic, retain) NSMutableArray *workingArray;
@property (strong, nonatomic) BirdsListDataController *dataController;
@property (strong, nonatomic) IBOutlet UITableView *birdListTableView;

@end

BirdsListViewController.m

#import "BirdsListViewController.h"
#import "BirdsListDataController.h"

@interface BirdsListViewController ()
@end

@implementation BirdsListViewController

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
...

BirdsListDataController.h

#import <Foundation/Foundation.h>     
@class BirdName;

@interface BirdsListDataController : NSObject

@property (nonatomic, copy) NSMutableArray *listOfBirds;
-(NSUInteger)countOfList;
-(BirdName *)objectInListAtIndex:(NSUInteger)theIndex;
-(void)addBirdNameWithName:(BirdName *)bName;
@end

BirdsListDataController.m

#import "BirdsListDataController.h"
//#import "BirdsListViewController.h"
#import "Bird.h"

@implementation BirdsListDataController

-(id)init
{...

我还是iOS和Objective C的新手,所以希望我的代码不会太难以排除故障。谢谢你的帮助。

3 个答案:

答案 0 :(得分:3)

对于寻找更好答案而非评论/取消注释代码的人来说,更好的解决方案是清理项目并删除派生数据。修复循环引用后,按键Command+Shift+K将清除项目,或者您可以转到并选择Product->Clean

要删除派生数据,请打开管理器,单击“项目”选项卡,导航到侧栏中的项目。您应该在项目名称标题下看到“派生数据”。在右侧应该是一个删除按钮。如果已启用,则删除派生数据也可以删除挂起错误。

作为解释的方式,有时似乎Xcode与项目不同步,持有不再存在的错误。这在更新的版本中更好,但偶尔也会发生。

答案 1 :(得分:1)

我不确定是什么导致了您的问题,但有一些事情:

  • 在您提供的代码中,没有理由不在BirdListViewController.h中导入BirdListDataController.h,因为在BirdListDataController.h中没有对BirdListViewControllers的引用。所以尝试用#import语句替换你的@class声明。

  • 在BirdListDataController.h中声明@class BirdName,但在BirdListDataController.m中导入Bird.h而不是BirdName.h。看起来有些东西可能出错了,虽然我必须看到BirdName.h和Bird.h的代码才能确定。

答案 2 :(得分:0)

在我的情况下,我在不同的文件夹结构中有重复的类名,一旦我删除了新的类并以不同的方式命名,所有内容都重复了。

根据“shA.t”的评论,将其转化为实用的解决方案:

如果您评论/取消注释代码,或者如上所述清理项目     建议的答案,但仍然没有解决它:

  1. 采取措施回顾最近的班级变化并仔细检查 即使在不同的目录中,所有类名都是唯一的 检查

    他们所有

  2. 如果找到重复的类名:对其进行备份 代码,删除该类(不只是引用,也是删除)
  3. 创建一个具有唯一名称的新类并合并备份 代码
  4. 对于这个特殊的重复类名称场景,这将为您省去导入和评论#import“class.h”的麻烦。