【问题标题】:Cocoa Controller imports Model, Model imports Controller --> ExceptionCocoa 控制器导入模型,模型导入控制器 --> 异常
【发布时间】:2010-05-20 12:31:44
【问题描述】:

为什么在 Cocoa 中两个类不能相互导入? 我尝试了以下代码:

控制器.h:

#import <Cocoa/Cocoa.h>
#import "Model.h"

@interface Controller : NSObject {
 Model *model;
}

@end

模型.h:

#import <Cocoa/Cocoa.h>
#import "Controller.h"

@interface Model : NSObject {
 Controller *controller;
}

@end

引发以下异常:

error: expected specifier-qualifier-list before 'Controller'
error: expected specifier-qualifier-list before 'Model'

谁能解释一下这是为什么?

谢谢! 索尼克

【问题讨论】:

  • 这在技术上不是一个“异常”(这是一个运行时事件),它是一个编译器错误消息。
  • 在这种情况下,“为什么”相当简单,如果您在脑海中扩展#import 以将一个文件的文本放入另一个文件中,您可以自己看到它:您先导入 Model 的定义定义控制器,但该定义使用控制器。反之亦然。存在循环依赖,因此一个总是没有在另一个之前定义。这就是 @class 声明存在的原因:它只是说“我稍后会定义它,同时不要担心它。”这打破了循环,等等。

标签: objective-c cocoa model-view-controller import


【解决方案1】:

解释为什么?没有。

但解决方案是像这样使用@class 声明:

@class Model;
@interface Controller : NSObject {
 Model *model;
}
@end

【讨论】:

    【解决方案2】:

    对此的解决方案是: 模型.h:

    #import <Cocoa/Cocoa.h>
    #import "Controller.h"
    
    @class Controller;
    @interface Model : NSObject {
     Controller *controller;
    }
    
    @end
    

    你已经完成了

    【讨论】:

      猜你喜欢
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 2020-07-14
      • 1970-01-01
      • 2014-07-04
      相关资源
      最近更新 更多