Xcode中的自动完成功能未按预期工作(使用其他IDE)

时间:2013-07-18 07:18:32

标签: xcode autocomplete

首先请允许我声明我是关于Objective-C和Xcode的绝对新手,因为我来自Flash Builder(IDE)/ AS3背景。我最近开始学习Objective-C并使用Xcode。

我现在正在编写我的第一个程序,并注意到Xcode中的自动完成功能无法正常工作。它向我展示了各种与我正在使用的类型无关的各种价值观。

如果我宣布:

NSFileManager *manager;

然后如果我输入         manager = [NSFileManager并在此输入命令+空格我希望defaultManager是其中一个建议。建议应该只是NSFileManager类的方法和属性。这就是我在Flash Builder中习惯的方式。

这是Xcode中的一个错误,一些配置错误还是因为Xcode不起作用?

Autocomplete

12 个答案:

答案 0 :(得分:15)

我在项目中间将Xcode 4升级到5,发现我在子组中创建的任何新文件(等同于项目中的子文件夹)都没有自动完成,而顶层文件夹中的新文件自动完成。我通过设置:

来解决这个问题

Build Settings ==> Search Paths ==> Always Search User PathsYes。现在所有文件都自动完成。

答案 1 :(得分:9)

正如前面提到的here,有很多原因和解决方案。

对我来说帮助了这个解决方案: 转到偏好设置>地点>派生数据>单击箭头以在Finder中打开。 删除名为“派生数据”的文件夹。一切都恢复了。

答案 2 :(得分:3)

升级到新的Xcode版本后,我遇到了同样的问题。出于某种原因,对我有用的是首选项>文字编辑>在输入取消选择时建议完成,然后重新选择

希望这有帮助。

答案 3 :(得分:2)

Xcode正在回答尽可能最好的问题。

问题的一部分归结于Objective-C的“运行时决定的事物” - 编译器为您提供了所有可能的可能性,这通常比您期望的要宽得多。这不仅仅是超类(通常一直到NSObject),而是同一名称空间中的其他内容,或者可能位于同一名称空间中。使用Objective-C,在编译时并不是一件事 - 就像许多其他语言一样,在运行时会留下很多东西,并且编译器并不总是能够确定可用的东西 - 有时候它只是相信你确实知道自己在做什么。这意味着您最终可以获得多种选择。

每个新版本的Xcode自动完成都会变得更好 - 但仍有很大的提升空间!但是,当你不记得你想要使用的方法的确切名称(甚至第一个字母)时,这很棘手 - 在这些情况下,我只是回到文档。

基本上,你只需要继续打字,直到它缩小可能性。它也可能因代码中的语法错误而被触发 - 错误后面的方法突然变得不可见自动完成。

再看一下你的问题,看起来你的系统上的自动完成确实被打破了 - 这超出了通常的范围。可能是Xcode的索引或其他东西搞砸了。看看一些旧答案herehere的灵感,因为它可能会让你感到痛苦。它不太可能仅仅是因为它正在尝试工作而导致设置,因此无论是某种东西是否已损坏,或者您的配置中的某些内容都令人困惑。

答案 4 :(得分:2)

首先提示一点:您永远不必在同一个文件中导入FoundationCocoaCocoa是一个“元框架”(Apple称之为“伞形框架”),这意味着它本身不是框架,而是导入Cocoa与导入Foundation相同,AppKitCoreData(这只是一个快捷方式 - 导入一个,获得三个)。

现在关于您的问题:您是否未将CocoaFoundation添加到Xcode项目中? Xcode只搜索源代码文件和Xcode项目引用的框架中的完成。您总是可以导入任何框架的标头,编译器会找到它们(因为它总是在所选SDK的System/Library/Frameworks目录中搜索框架),但Xcode本身只搜索项目直接引用的框架的标题执行代码完成时。如果你没有引用Foundation,Xcode将不知道NSFileManager的对象声明,因此也不知道NSFileManager实际上是一个Obj-C对象或它有哪些方法。当您将框架添加到构建过程的链接阶段时,Xcode应自动向项目添加框架引用。您是否可以在没有链接器错误的情况下实际构建应用程序代码?

答案 5 :(得分:1)

在OSX中,CMD + Space通常通过Finder提取Spotlight搜索,而不是自动填写Xcode。当你尝试击中ESC时会发生什么? ESC是Xcode中的默认自动填充键。如果我使用你的代码并点击ESC我的自动填充选项,我得到的第一个选项是defaultManager

我希望有所帮助!

编辑:

在Xcode中打开偏好设置,点击文字修改标签,确保选中使用退出键显示完成建议

2016年编辑:请注意这个答案是为大约Xcode 4.x提供的。如果你想对它进行downvote,请提供一个不再相关的评论,我将删除它。谢谢!

答案 6 :(得分:1)

在我的情况下,自动填充功能不起作用,因为我使用真正的文件夹进行分组......不高兴,不高兴。

Xcode 7.3(7D175)

答案 7 :(得分:1)

如果您的项目没有正确编入索引,可能会发生此问题。

首先,请确保已启用索引:

应用 - > 实用程序 - > luanch 终端并输入:

defaults write com.apple.dt.XCode IDEIndexDisable 0 

然后转到DerivedData文件夹以删除文件。

打开Finder并导航到〜/ Library / Developer / Xcode / DerivedData 并输入:

rm -rfv *

之后,关闭并重新打开Xcode,转到产品 - >清理并等待索引..

答案 8 :(得分:0)

我发现有些项目正在进行中,很难完成工作。我发现这个问题的解决方案是我的新项目是8.1,我没有下载新版本的文档。当我将项目更改回8.0版本时,完成程序又回来了。进入首选项和下载,看看你没有得到的下载......不确定为什么这不是更新的一部分

答案 9 :(得分:0)

如果您在同一目标/项目中包含多个相同的文件,有时自动填充功能会变得混乱(检查您的项目是否有重复文件,请同时检查项目&gt;构建阶段&gt;编译源并消除重复项< /强>)

答案 10 :(得分:0)

我还有另外一个解释为什么会发生这种情况的原因。我最近遇到了一个较旧的代码问题。我尝试删除像许多人建议的DerivedData,但它没有帮助。我确认属性名称是全球唯一的。我还验证清理项目并重新启动Xcode没有帮助。我在Xcode 6和Xcode 7上都试过了。

最后,我发现它可能与我的Xcode项目需要iOS 6兼容性以及我需要引用的类@property变量无法在.m文件中声明这一事实有关。通过将它们移动到头文件,问题就解决了。

对于旧版本的iOS SDK,您必须在标题中声明@property变量,但我习惯将它们放在.m文件中(在较新的项目中)以保留标题整洁。因此,Xcode拒绝使用自动完成识别它们,但它会成功构建。

希望这有助于某人。我知道这是一种不常见的情况。

答案 11 :(得分:0)

同样的事情发生了,全新的项目,汽车完成没有工作...... Xcode选择使用10.10 SDK,然后将部署目标设置为10.11。它甚至在工具栏中显示有关问题的警告。将部署目标设置为编译器默认值可以解决问题。