18

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

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

如果我声明:

NSFileManager *manager;

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

这是 Xcode 中的错误、配置错误还是 Xcode 不应该工作?

自动完成

4

12 回答 12

16

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

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

于 2014-01-21T16:39:29.197 回答
9

正如这里提到的,有很多原因和解决方案。

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

于 2014-10-30T13:52:50.617 回答
3

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

希望这可以帮助。

于 2017-01-09T14:51:38.813 回答
2

Xcode 正在尽可能地回答什么是可用的问题。

部分问题归结于 Objective-C 的“事情在运行时决定”的性质——编译器为您提供了所有可能的可能性,这通常比您预期的要广泛得多。这不仅仅是超类(通常一直到 NSObject),而是同一命名空间中的其他东西,或者可能在同一命名空间中。对于 Objective-C,事情在编译时并不是一成不变的——就像许多其他语言一样,有很多事情要等到运行时才能完成,而且编译器并不总是能够确定什么是可用的——有时它只是相信你真的知道你在做什么。这意味着您最终可能会看到多种选择。

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

基本上,您只需要继续输入,直到它缩小可能性。它也可能被代码中的语法错误绊倒——错误之后的方法突然变得对自动完成不可见。

再次查看您的问题,您的系统上的自动完成功能似乎确实被破坏了 - 这超出了通常的范围。可能是 Xcode 的索引或某些东西搞砸了。在此处查看一些旧答案,并在此处获取灵感,因为您可能正在遭受一些相关的痛苦。它不太可能仅仅由正在尝试工作的设置引起,因此要么是某些东西损坏了,要么是您的配置中的某些东西令人困惑。

于 2013-07-29T14:43:04.800 回答
2

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

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

于 2013-07-31T14:49:00.000 回答
2

当您的项目未正确编入索引时,可能会发生此问题。

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

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

defaults write com.apple.dt.XCode IDEIndexDisable 0 

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

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

rm -rfv *

之后,关闭并重新打开 Xcode,转到Product -> Clean并等待索引..

于 2016-10-13T17:46:49.527 回答
1

在 OSX 中,CMD+Space 通常通过 Finder 拉起 Spotlight Search,而不是在 Xcode 中自动填充。当您尝试按 ESC 时会发生什么?ESC 是 Xcode 中默认的自动填充键。如果我使用您的代码并按 ESC 作为自动填充选项,我得到的第一个选项是defaultManager.

我希望这会有所帮助!

编辑:

在 Xcode 打开Preferences中,单击Text Editing Tab 并确保选中Use Escape key to show completionSuggestion 。

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

于 2013-07-18T17:03:49.387 回答
1

就我而言,自动完成不起作用,因为我使用真实文件夹进行分组……不高兴,不高兴。

Xcode 7.3 (7D175)

于 2016-04-26T12:07:08.833 回答
0

我发现一些项目正在进行中,正在努力完成工作。我发现这个问题的解决方案是我的新项目是在 8.1 中,我还没有下载新版本的文档。当我将项目改回 8.0 版本时,完成情况又回来了。进入首选项和下载以查看您没有的下载.....不知道为什么这不是更新的一部分

于 2014-11-07T05:30:07.877 回答
0

当您在同一个目标/项目中包含多个相同文件时,有时自动完成会变得混乱(检查您的项目是否有重复文件,还要检查 Project > Build Phases > Compile Sources 并消除重复项

于 2015-05-07T11:18:17.243 回答
0

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

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

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

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

于 2016-01-09T20:41:48.870 回答
0

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

于 2016-02-17T11:14:08.267 回答