Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要了解Xcode*.pch文件的帮助吗_Xcode_Compiler Construction_Import_Settings - Fatal编程技术网

需要了解Xcode*.pch文件的帮助吗

需要了解Xcode*.pch文件的帮助吗,xcode,compiler-construction,import,settings,Xcode,Compiler Construction,Import,Settings,我正在为iOS开发第三方UIKit替代品。我使用GitHub的一个非常有用的项目将其构建为一个框架。(不是我的,但如果你有兴趣,那是我的 我试图在我正在编写的其他项目中使用我的库。正如我所说,它基本上是大部分UIKit的替代品,因此我决定在我的项目的*.pch文件中导入框架,而不是在我希望使用按钮、操作表、警报视图等的任何地方 当我在头文件中没有#import指令并声明类型为mbmbmbutton的属性时,编译器会给我一个错误“未知类型名'mbmbmbutton';你是说'UIButton'?”

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

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

当我在头文件中没有
#import
指令并声明类型为
mbmbmbutton
的属性时,编译器会给我一个错误“未知类型名'mbmbmbutton';你是说'UIButton'?”,奇怪的是,代码仍然会运行(即使这是错误,而不是警告)添加
@class MBMButton
#import
可解决此编译器问题

当我在实现文件(或其头)中没有
#import
指令,并且调用
MBMUIButton
中存在但不在
UIButton
中的方法时,我会得到一个编译器错误“UIButton'声明选择器时没有可见的@interface…”.与前面一样,代码将实际运行,因为它是一个有效的调用

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


我同意不使用*.pch文件。这只是一种方便,而且我肯定可以使用适当的
@class
#import
指令。困扰我的不是理解这个问题。一个人应该如何使用*.pch文件?

前缀头文件会自动包含在每个.m文件中e在项目中,但不在任何.h文件中

因此,对类的任何引用都需要包含标题或转发声明:

@class MyClass;
但是,对于
@protocol
您需要完整的头,转发声明不起作用:

@protocol MyProtocol; //this won't work

@interface MyController : UIViewController <MyProtocol>

…
@end
@protocol MyProtocol;//这行不通
@接口MyController:UIViewController
…
@结束

前缀头文件自动包含在项目中的每个.m文件中,但不包含在任何.h文件中

因此,对类的任何引用都需要包含标题或转发声明:

@class MyClass;
但是,对于
@protocol
您需要完整的头,转发声明不起作用:

@protocol MyProtocol; //this won't work

@interface MyController : UIViewController <MyProtocol>

…
@end
@protocol MyProtocol;//这行不通
@接口MyController:UIViewController
…
@结束

感谢您的快速回复。这对于我的头文件中的错误是有意义的,但是为什么我的实现中会出现“No@interface…”错误?感谢您的快速回复。对于我的头文件中的错误是有意义的,但是为什么我会得到“No@interface…”我的实现中有错误吗?