为什么自动完成在xcode中新创建的协议头文件中不起作用?

时间:2013-12-23 09:51:46

标签: objective-c xcode autocomplete protocols

我只需创建一个协议头文件:

档案 - >新 - >档案 - > (Cocoa Touch)Objective-C Protocol - >下一步 - >输入协议名称 - >下一步 - >选择我的目标 - >创建

当我尝试在协议头文件中创建方法列表时。我注意到动态打字不起作用。当我在其他文件中键入“NSStr”时,通常会自动弹出类列表,并且所有类都标有颜色。为什么它在协议头文件中不起作用?

顺便说一下,我尝试将协议代码放在现有的类文件中,这有效。为什么它在分隔文件中不起作用?

一些关键词会起作用,例如“无效”。弹出列表将显示。但其他关键词如“NSString”将无法识别。

我的协议是这样的:

#import <Foundation/Foundation.h>

@protocol PanToSwitchViewDelegateProtocol <NSObject>

@end

2 个答案:

答案 0 :(得分:14)

我只是进行了实验,我看到完全一样的东西。我认为问题是编译器不会扫描文件,除非它被导入到扫描的文件中。

如果您将协议标头导入.m文件并编译运气,那么您应该开始在NSString上获取自动完成功能。

修改

从我对答案和其他地方的评论中可以清楚地看出,jazou2012处于一种误解之中。

自动完成无关于模块是否正确无话可说。由于多种原因,自动填充可能无法找到标识符,即使该标识符已正确定义也是如此。例如,即使导入Foundation.h,我也可以在协议中复制Jazou的NSString问题。

但是,只要我将协议标头导入.m文件,自动完成就会开始识别NSString。我的猜测是,如果编译器可以看到自动完成只开始索引文件。

如果要捕获编译错误,则需要编译代码。如果编译器说“没有错误或警告”,那么无论自动完成的内容如何,​​您的代码都可以。

答案 1 :(得分:1)

导入到类标题或实现文件中,或导入到可见的另一个位置,例如导入的另一个标头或预编译的标头。 Foundation中的协议始终可见,因为它们是使用Foundation导入的。 Cocoa包含Foundation,因此视图类将包含Cocoa协议。 默认情况下不包括Core Animation和WebKit,因此您需要导入它们以查看它们包含的任何协议。