2013-07-18 26 views
17

首先让我声明我是来自Flash Builder(IDE)/ AS3背景的Objective-C和XCode的绝对新手。我最近开始学习Objective-C并使用XCode。XCode中的自动完成功能未按预期工作(使用其他IDE)

我现在正在编写我的第一个程序,并注意到XCode中的自动完成功能并不像我期望的那样工作。它向我展示了与我正在使用的课程类型看似无关的各种价值。

如果我宣布:

NSFileManager *manager; 

那么如果我键入 manager = [NSFileManager并键入命令+空间在这里我希望defaultManager是的建议之一。建议只应该是NSFileManager类的方法和属性。这是我在Flash Builder中习惯的方式。

这是XCode中的错误,有些配置错误,或者仅仅是因为XCode应该工作?

Autocomplete

+0

我无法重现您的问题。在我的系统上,Xcode的行为与你喜欢的行为完全相同:它仅向我展示了'NSFileManager'类的方法,其中'defaultManager'被选择为具有最高可能性的完成。顺便说一句,你不要输入command + space('CMD + SPACE'),你可以输入'control + space'('CTRL + SPACE')。在Mac上,这两个键是不同的键,'CMD + SPACE'默认启动聚光灯搜索。 – Mecki

+0

有时重新启动XCode解决它 –

回答

1

在OSX CMD +空格通常拉起通过搜索Spotlight搜索,而不是在XCode的自动填充。当你尝试点击ESC时会发生什么? ESC是XCode中的默认自动填充键。如果我使用自己的代码并按下ESC键进行自动填充选项,我会得到的第一个选项是defaultManager

我希望有帮助!

编辑:

在Xcode开放,点击文本编辑选项卡,并确保使用Escape键显示完成建议检查。

编辑2016年:请注意这个答案是提供了大约XCode 4.x.如果您想降低评分,请提供评论,说明它已不再相关,我会将其删除。谢谢!

+0

我试过ESC,它显示了与屏幕截图中相同的选项。感谢您的帮助,但认为问题在其他地方:s –

+0

所以你说如果你键入'[NSFileManager'(注意空间)并点击ESC你不会得到'defaultManager'作为你的第一次自动填充? – Dan

+0

正确的是,“使用Escape键显示完成建议”选项在偏好设置中被选中,但是当我按ESC键(在输入空格后)时,我得到一个弹出窗口(int,long,main,manager,..)。即使我键入(空格)然后d然后按ESC我得到“默认”,“做”和“双”作为唯一的建议。 –

2

Xcode正在回答尽可能最好的问题。部分问题归结为Objective-C的'运行时'性质决定的事情 - 编译器为您提供了所有可能的可能性,这通常比您期望的要宽得多。这不仅仅是超类(通常一直到NSObject),还有其他一些东西在同一个命名空间中,或者可能在同一个命名空间中。有了Objective-C,在编译时事情并不是一帆风顺的 - 就像许多其他语言一样,在运行时间之前还有很多事情要做,编译器并不总是能够确定可用的东西 - 有时候它只是相信你真的知道你在做什么。这意味着您可以最终呈现多种选择。

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

基本上,你只需要继续打字,直到它缩小可能性。它也可能在你的代码中出现语法错误 - 在错误突然变得对自动完成不可见的方法中。

再次回顾一下你的问题,看起来自动完成在你的系统上相当糟糕 - 这超出了平常的水平。这可能是XCode的索引或其他东西搞砸了。看看一些旧的答案herehere的灵感,因为它可能是你遭受了一些有关的事情。它不太可能仅仅是因为设置正在尝试工作而导致的,所以无论是什么东西的损坏,或者配置中的某些事情都是令人困惑的事情。

2

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

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

+0

是的,我能够构建项目并运行它 –

+0

我向可链接的库中添加了Cocoa,但没有任何帮助。它也不会完成defaultMan甚至defaultManager ..它在AppCode中正常工作我现在使用该程序来编码.. –

14

我在项目中间将Xcode 4升级到了5,并发现我在子组中创建的任何新文件(等同于项目中的子文件夹)未自动完成,而顶级文件夹中的新文件自动完成。我通过设置来解决这个问题:

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

+0

任何时候你升级Xcode你应该删除所有项目的派生数据。这包括每个目标索引。 – geowar

+0

这对我工作感谢 –

8

如上所述here有很多原因和解决方法。

对我帮助这个解决方案: 转到首选项>位置>导出数据>单击箭头在Finder打开。 删除名为“Derived Data”的文件夹。一切都可以再次运作。

0

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

0

有时自动补全有点杂乱,当你有多个相同的文件在同一个目标/项目中(查看您的项目是否存在重复文件,请检查项目>构建阶段>编译源并消除重复项目

0

我对此有另一种解释。我最近遇到了一些较旧的代码。我尝试删除像许多人建议的DerivedData,但它没有帮助。我确认这些属性名称是全球唯一的。我也证实清理项目并重新启动Xcode并没有帮助。我在Xcode 6和Xcode 7上都试过了。

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

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

希望这可以帮助别人。我知道这是一个不常见的情况。

0

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

1

在我的情况下自动完成没有工作,因为我使用的真实文件夹进行分组......不以物喜,不以物喜。当你的项目没有正确索引

的Xcode 7.3(7D175)

1

可能发生此问题。

首先,确保你已经启用索引:

应用 - >工具 - > luanch 终端和类型:

defaults write com.apple.dt.XCode IDEIndexDisable 0 

然后去了DerivedData文件夹中删除文件。

打开Finder并导航到〜/资源库/开发/ Xcode中/ DerivedData和类型:

rm -rfv * 

之后,关闭并重新打开Xcode中,去产品 - >清洁和等待为索引..

3

升级到新的XCode版本后,我遇到了同样的问题。出于某种原因,对我而言,首选项>文本编辑>建议完成时键入取消选择它,然后重新选择它。

希望这会有所帮助。

+1

惊人的,但它的工作,Xcode是5年后落后智能 – XcodeNOOB