1

我有一个UIViewController被调用的子类,FullScreenViewController它有一个类型的属性,ImageScrollView它是子类UIScrollView对象。实现和接口如下所示:

全屏视图控制器.h

#import <UIKit/UIKit.h>

@class ImageScrollView;

@interface FullScreenViewController : UIViewController 
{
    ImageScrollView *_scrollView;

}

@property(nonatomic, retain) ImageScrollView *scrollView;

@end

全屏视图控制器.m

#import "FullScreenViewController.h"
#import "ImageScrollView.h"

@implementation FullScreenViewController

@synthesize scrollView = _scrollView;
...
@end

现在我子类FullScreenViewController化,我尝试从ImageScrollView属性访问任何属性,但我不断收到错误消息:“找不到属性”。当我添加ImageScrollView.h到子类时,它可以工作,但我不明白这一点。我已经加ImageScrollView.h进去了FullScreenViewController,为什么还要再加呢?

更新:我没有使用前向类声明,而是将 ImageScrollView.h 包含在 FullScreenViewController.h 中。我有点困惑,为什么我曾经使用前向声明而不是只包含 .h 文件?

4

3 回答 3

3

您需要添加它的原因是您的 FullScreenViewController.h 文件中只有一个 @class 声明。这仅将 ImageScrollView* 类型的变量声明为指向 ImageScrollView 类对象的指针。它不允许您访问 ImageScrollView 的属性。要访问特定于 ImageScrollView 的方法和属性,您需要包含 ImageScrollView 的 @interface 声明,我假设它位于您的 ImageScrollView.h 文件中。

于 2012-05-12T06:54:58.250 回答
2

给定标题:

@interface FullScreenViewController : UIViewController 
{
    ImageScrollView *_scrollView;

}

@property(nonatomic, retain) ImageScrollView *scrollView;

@end

只需要一个前向声明@class ImageScrollView。这告诉编译器有一个名为 的 objc 类ImageScrollView

当然,通过前向声明,界面在你需要使用的地方是不可见的,除非你#import在使用它的地方还有 ImageScrollView。

现在我将 FullScreenViewController 子类化,并尝试从 ImageScrollView 属性访问任何属性,但我不断收到错误消息:“找不到属性”。当我将 ImageScrollView.h 添加到子类时,它可以工作,但我不明白这一点。我已经在 FullScreenViewController 中添加了 ImageScrollView.h,为什么还要重新添加呢?

ImageScrollView的声明对子类不可见FullScreenViewControllerSubclassImageScrollView.h仅在#imported 处可见。FullScreenViewController.m对 是不可见的FullScreenViewControllerSubclass.m。因此,您必须#import在其中编写另一个FullScreenViewControllerSubclass.m才能使用ImageScrollView

更新:我没有使用前向类声明,而是将 ImageScrollView.h 包含在 FullScreenViewController.h 中。我有点困惑,为什么我曾经使用前向声明而不是只包含 .h 文件?

使用正向快速构建时间和健全、受控的依赖结构。这是一个非常耗时的撤消问题。随着程序和库的大小增加,这个问题会变得更糟:

您是否希望在中型项目中更改标题以要求重新编译 50 个源,每个翻译的平均预处理输入为 150,000 行,或者您希望该更改影响 6 个源,每个翻译的平均预处理输入为 40,000 行? 此处的不同之处在于,小的更改需要几秒钟到几分钟的增量重建才能完成,具体取决于您如何构建依赖项和导入。

于 2012-05-12T20:25:18.283 回答
0

您是否尝试过使用别名 _scrollView 或 scrollView 访问它。您应该使用 _scrollView 访问它并查看您是否已将文件导入到 .m 或 .h 中,因为 @class 还不够。

于 2012-05-12T06:32:34.423 回答