gpt4 book ai didi

objective-c - Objective C 前向类属性

转载 作者:行者123 更新时间:2023-12-03 17:56:42 25 4
gpt4 key购买 nike

我正在制作一个 Mac OS X 应用程序,我试图让类(class)互相了解

Controller 创建View1和View2

BaseView具有Controller的属性

View1 和 View2 从 BaseView 扩展

这是我的例子

Controller 类

#import <Cocoa/Cocoa.h>
#import "View1.h"
@class View1;
@interface Controller : NSViewController
{
View1 *_view1;
}
@end

//////

#import "Controller.h"

@implementation Controller

- (id) init
{
self = [super init];
if( self )
{
_view1 = [[View1 alloc] initWithFrame:CGRectZero];
_view1.controller = self;
}
return self;
}
@end

BaseView类

#import <Cocoa/Cocoa.h>
#import "Controller.h"
@class Controller;
@interface BaseView : NSView
{
Controller *_controller;
}

@property (nonatomic,assign) Controller *controller;

@end

//////

#import "BaseView.h"

@implementation BaseView

@synthesize controller = _controller;

@end

查看示例类

#import "BaseView.h"

@interface View1 : BaseView

@end

//////

#import "View1.h"

@implementation View1

@end

但它给了我这个错误:

Controller.m:23:16: Property 'controller' cannot be found in forward class object 'View1'

我做错了什么?

最佳答案

当您在头文件中使用前向声明(例如 @class View1;)时,无需#import 头文件。

在 View1.h 中,您没有声明 @class,这就是您收到错误的地方。不过,我建议您在头文件中使用前向声明,并在需要方法声明等时在实现文件中导入所需的头文件 - 这也将防止您出现头循环。

你的代码应该是这样的

@class BaseView; 
@interface View1 : BaseView

@end

//////

#import "View1.h"
#import "BaseView.h"
@implementation View1

@end

关于objective-c - Objective C 前向类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12215575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com