需要帮助理解 Xcode *.pch 文件

问题描述 投票:0回答:1

我正在开发 iOS 的第 3 方 UIKit 替代品。我使用 GitHub 上的一个非常有用的项目将其构建为一个框架。 (不是我的,但如果您有兴趣,就在这里

我正在尝试在我正在编写的其他项目中使用我的库。就像我说的,它基本上是 UIKit 大部分内容的直接替代品,因此我决定在项目的 *.pch 文件中导入该框架,而不是在我可能希望使用按钮、操作表、警报视图等的任何地方导入该框架。 .

当我在头文件中没有

#import
指令并声明类型为
MBMButton
的属性时,编译器会给出错误“未知类型名称‘MBMButton’;您的意思是‘UIButton’吗?”奇怪的是,代码仍然会运行(即使这是一个错误,而不是警告)。添加
@class MBMButton
#import <MBMUIKit/MBMUIKit.h>
可解决此编译器问题。

当我在实现文件(或其标头)中没有

#import
指令并调用存在于
MBMUIButton
中但不存在于
UIButton
中的方法时,我会得到一个编译器 error“Novisible @ ‘UIButton’的接口声明了选择器...”。和以前一样,代码将实际运行,因为它是有效的调用。

现在,我已经做了一些挖掘,并且更改了项目的设置。在 GCC_PREFIX_HEADER 中没有任何值的地方,我添加了文件名。注意到Apple的快速帮助描述,我尝试了“ProjectName-Prefix.pch”和“./ProjectName-Prefix.pch”。两者似乎都没有解决问题。我最终发现Target级别设置覆盖了Project级别设置,并且Target级别设置已经指定了“ProjectName/ProjectName-Prefix.pch”。所以这是一个死胡同。 (不过,很高兴确切地了解相对路径设置是什么!)

我可以不使用 *.pch 文件。这只是一种方便,我绝对可以使用适当的

@class
#import
指令。困扰我的不是“理解”问题。 应该如何使用 *.pch 文件?

xcode import settings
1个回答
4
投票

因此,对类的任何引用都需要包含标头或前向声明:

@class MyClass;

但是对于
@protocol

,您需要完整的标头,前向声明不起作用:

@protocol MyProtocol; //this won't work

@interface MyController : UIViewController <MyProtocol>

…
@end

	
© www.soinside.com 2019 - 2025. All rights reserved.