Xcode 9自动完成功能不起作用100%-部分起作用


120

今天早上,Xcode 9.0(9A235)显示了一个新的/奇怪的“自动完成”框,它与以前完全不同。我如何获得完整的自动完成框,以使自动完成看起来像通常一样?

在此处输入图片说明


1
删除“派生数据”文件夹对我来说解决了。感谢另一篇文章。感谢这篇文章:stackoverflow.com/questions/28429630/…–
Ernie

可能是因为尚未完成索引编制
ozgur

1
尝试了所有建议的解决方案,但对我的一个项目却无济于事
亚历山大·瓦森宁

3
11.3是关于此问题的灾难。通常只是重新启动Xcode会有所帮助:/
Fattie

Answers:


232

尝试:

  1. 转到Xcode>首选项>文本编辑
  2. 在“代码完成”下-取消选中“键入时建议完成”
  3. 退出Xcode,然后重新启动Xcode。
  4. 再次转到Xcode>首选项>文本编辑
  5. 退出Xcode,然后重新启动Xcode。
  6. 现在转到代码完成,然后选中 “键入时建议完成”。
  7. 尝试输入库函数或枚举,然后尽情享受!

2
很棒的解决方案。太奇怪了。我想知道您是如何复制的。
库纳尔·古普塔

1
百万美元的答案。这甚至修复了“跳转到定义”的问题
。– OutOnAWeekend

Xcode 11.2仍需要此代码,谢谢您进行怪异的生活破解:-)
Rocket Garden

Xcode中的这个bug总是有新的更新会产生新的问题,对我来说,有效的解决方案是:1-相当Xcode。2-等待几秒钟。3-打开Xcode,但是即使在编辑器中单击也不要触摸任何东西。4-等到索引完成。自动完成功能现在可以使用。
Shahriar

1
2020年7月在Catalina的XCode 11.5中仍然有必要。非常感谢!
Reuben Scratton


30

尝试的事情:

1个

如果使用cocoapods,请在项目目录中运行以下命令:

rm -rf ~/Library/Caches/CocoaPods;
rm -rf Pods; rm -rf ~/Library/Developer/Xcode/DerivedData/*;
pod deintegrate; pod setup; pod install;


2

清除缓存的数据

清理项目-> Cmd + Shift + K

清理构建文件夹-> Cmd + Shift + Option + K

如果您跳过了第一步,请执行以下操作:
删除派生数据
Xcode Preferences-> Locations->
箭头符号转到DerrivedData->删除文件夹


3

检查您的构建阶段的编译源。

项目中的每个.swift.m文件都应在此列表中,否则它们将不会自动完成。


4

优化编辑器:

在每个类属性和函数上使用fileprivate,可以减小每个项目的编译器工作范围。

编写模块化/ OOP代码,因此您需要较少的代码供编译器读取。

当结果是复杂的计算时,避免使用类型推断,并尝试将复杂的计算分解为let this = smallerOperation语句


使用XCode 9.2,派生数据文件夹中不再有箭头符号。感谢您的fileprivate提示。噩梦仍在继续……
萨尔

我仍然看到箭头符号。这是在9.2的早期版本中吗?
Sethmr

28

Xcode版本11.0(11A420a)

我已经尝试过Lal Krishna的解决方案的Xcode V11.0。它工作了几次,但后来我没有结果。

我找到了一种解决方案。您必须删除两个文件:

  1. 库/开发人员/ Xcode /派生数据(如前所述)
  2. 库/开发人员/ Xcode / UserData / IDEEditorInteractivityHistory

该解决方案现在对我有帮助。可能对其他人有用useful


3
为我工作。我只想说Visual Studio 2002(!)比Xcode 2009-2019更好。这些年来,Xcode是如此的马车。我不明白为什么苹果不关心开发人员。开发人员制作的Xcode!(我必须把它弄出来)
user1105951

这对我
有用

20

当文件不是目标服务器的成员时,可能会发生这种情况。打开自动完成功能不起作用的文件,并在Xcode的右上角显示“实用程序”选项卡(在下面的屏幕截图中为蓝色)。 Xcode右上视图按钮的屏幕截图

Xcode目标成员资格选项的屏幕快照

确保选中了您的目标(通常是您应用的名称)。自动完成功能几乎可以立即生效,而无需重新启动Xcode,清理或删除派生数据。

如果已经选中,请确保取消选中并再次重新选中。对我来说,它成功了。


仅打开该页面并关闭工作。我很困惑。谢谢顺便说一句。
Okhan Okbay

它适用于xcode10。该文件确实已经是目标的成员。我不得不取消选中该复选框,然后再次对其进行确认。
Jim75 '18 -10-13

git merge之后,这发生在我身上,我猜一个分支覆盖了我当前的项目文件,而另一个分支没有正确地合并到该文件中。
阿斯凡·沙伯(Afand Shabbir)'18 -10-18

11

我正在使用Xcode 10.2,但遇到了同样的问题。

来自axel的答案帮助我解决了。

无论如何,我将描述更多:

  1. YourProject.xcodeproj通过单击鼠标右键转到并打开Show Package Contents
  2. 转到xcuserdata并删除您的youruser.xcuserdatad

如果还安装了xcworkspace(如果已经安装了任何Pod),则请执行步骤3&4,否则请跳过步骤3&4:

  1. YourProject.xcworkspace通过单击鼠标右键转到并打开Show Package Contents
  2. 转到xcuserdata并删除您的youruser.xcuserdatad

  3. 退出Xcode

  4. 通过使用终端删除派生数据

rm -rf〜/库/开发人员/ Xcode / DerivedData

  1. 打开Xcode并检查它是否有效。

在此处输入图片说明


11

如果您冗余地命名文件,也会发生这种情况。例如,

Data.swift

Data.swift


1
就我而言,这就是问题所在,我在2个不同的文件夹中拥有相同的文件名
Raj

这也发生在我身上。两个ViewController文件
Shark Deng

1
以我为例,我有一个名为ABC的虚拟组,并且在该组中有一个名为ABC.swift的文件。重命名文件可解决此问题。谢谢
Rem-D


5

请尝试这样做:

选择文件 >>检查文件是否已添加到UITesting或UnitTesting目标中(文件检查器->目标成员身份)。如果是这样,请取消选中这两个选项,并确保仅选择了项目目标。然后构建并尝试自动完成是否正常。

这对我有用。希望它能帮助某人。


4

经过长时间的搜索,我终于为我解决了这个问题。在Xcode>首选项>文本编辑中的“代码完成”中,出于某种原因,我选择了“使用Escape键显示完成建议”。取消选中此框后,自动完成功能就像一个超级按钮,甚至不需要重新启动Xcode!(Xcode 10)


4

这里有一些解决方法,但可以。

  1. 清理项目... Command + Shift + K

  2. 清理构建文件夹... Command + Shift + Options(Alt)+ K

  3. 删除项目的派生数据...可以通过以下链接来完成:

    如何删除Xcode 9中的派生数据?

  4. 关闭XCode。

  5. 重新打开XCode(让索引完成)并构建项目... Command + B

一旦完成构建,建议将返回。我已经试过两次了。

更新:

有时问题可能很简单,就像文件名重复一样。仔细检查您添加的任何新文件名是否与旧文件冲突。


3

我在这里添加了项目中正在发生的事情,以防万一它可以帮助其他人... 我有两个同名文件,但我没有意识到。


2

只是为了解决Xcode(9.2)的自动完成噩梦而迷失了一天。删除派生数据似乎短暂,然后恢复原状。重新启动等和其他建议的伏都教徒都没有发挥作用。

我放弃并从Jet Brains下载AppCode的30天试用版。自动完成功能在这里工作得很好,这也许是巧合,但随后在我的Xcode项目中再次开始工作。无法保证它将继续工作...


“其他建议的伏都教徒”哈哈-这么好...我们花了很多时间来寻找苹果漏洞的解决方法,但是当我开始使用Android Studio时,我不再抱怨xcode了
JohnV

2

在我的情况下,它似乎是特定于文件的(Xcode 9.2)对我来说,解决方法是:

  1. 删除问题文件(删除参考)
  2. 清洁和建造
  3. 将文件重新添加到项目中(我没有检查测试目标)
  4. 再次建立

经过3个小时的尝试,终于可以完成自动填充功能。


2

问题主要是由于项目导航器中某些文件的位置丢失(生成错误)

  1. 按Command + 1打开Project Navigator窗格
  2. 检查是否有丢失的文件

或者您可以:

  1. 删除DerivedData(command + shift + K)
  2. 清理构建文件夹(command + shift + option + K)
  3. 再次按build(命令+ B)
  4. 您应该看到构建错误,即Xcode找不到一些阻止构建工具处理自动完成的文件。
  5. 更正并修复您看到的所有丢失文件。

希望这可以帮助



2

对于Xcode 11.4(11E146)

文件夹名称中的反斜杠会破坏自动完成功能,如果是这种情况,请将其删除并重新生成。

在此处输入图片说明


1

对我来说,它正在我的测试文件中发生,因为出于某种原因它不是目标的一部分。设置它的目标成员身份可以解决此问题。


1

对我来说,当我放弃一个文件的所有更改(在“源代码管理”>“提交”下)时,就会发生问题,从而有效地删除了该文件。这就是我想要的,我认为该文件及其所有引用也将被删除。

但是,在“项目”导航器中仍然有对该文件的引用(以红色显示)。在Project导航器中删除(现在不存在)文件会神奇地带回自动完成功能。

没有任何清理,删除派生数据等的帮助。我只是意识到,当我尝试构建项目时,删除的文件仍在显示,这当然失败了,因为找不到该文件。

希望这可以帮助某人节省30分钟:)


请参阅我的答案以了解原因。
詹姆斯·布什

@ponury,我不明白... OP第二段是解决方案,不是吗?
brasofilo

1

使用Command + B
Command + R构建运行项目
的Xcode有时食堂了;)


1
  1. 检查是否Suggest completions while typing在Xcode->首选项->文本编辑中选择了
  2. 导航到Finder中的用户->库->开发人员-> Xcode-> DerivedData并删除DerivedData文件夹

1

我的案例似乎过于具体,无法提供帮助,但可能会让某人了解如何解决自动完成中断问题。Xcode 10.2.1。

就我而言,自动完成功能完全无法正常工作,而其他任何答案都无法帮助我。此外,可能会听到计算机上的风扇声音更大,表明某些东西工作过度(没有其他应用程序在运行),应注意,我在MacBook Pro笔记本电脑上进行编辑。它似乎与努力解析我编写的方程式的编辑器有关:

switch mtype {
    case .indeterminate:
      newPosition.x = (frame.width - mainFigureText.frame.width) / 2
    case .right:
      newPosition.x = (((frame.width / 2) - mainFigureText.frame.width) / 2) + (frame.width / 2)
    case .left:
      newPosition.x = (((frame.width / 2) - mainFigureText.frame.width) / 2)
 }

我想根据用户的偏好向左,向右或向中间移动文本视图。的newPositionCGPoint,该文本将要设置动画。无论如何,我将方程式分解,突然自动完成工作开始,风扇安静了!通过重新键入上面的代码,然后将其替换为:,我已经能够多次创建此特定问题。

let halfFrameWidth: CGFloat = frame.width / 2
let middleLeft = (halfFrameWidth - mainFigureText.frame.width) / 2

switch doseType {
    case .right:
      newPosition.x = middleLeft + halfFrameWidth
    case .left:
      newPosition.x = middleLeft
    default:
      newPosition.x = (frame.width - mainFigureText.frame.width) / 2
 }

1

我想在解决方案中增加一个,因为它是唯一对我有用的解决方案,在这里找不到。

Xcode通常为每个项目提供两个默认的构建配置。ReleaseDebug。我的单元测试另外有一个名为Testing。在Xcode 10.1、10.2、10.3和11 beta中,新的构建系统似乎不喜欢它,并且仅当您使用Release或时才会自动完成Debug。任何自定义构建配置都会破坏带有单元测试的混合(swift + objc)项目中的自动完成。


0

此链接帮助了我。打开构建设置并填充框架搜索路径。参见下图。

在此处输入图片说明


0

生成错误可能会破坏Xcode中的自动完成功能。


0

我遇到的问题是100%无法自动完成,此处没有任何帮助。我注意到的一件事–在.xcdatamodel文件中添加了一些实体(默认情况下具有codegen类定义)后,它就被打破了。

因此,即使不重新启动xcode,使用老式代码生成器(即使生成类)也无法立即解决问题,我并不感到惊讶。

在此处输入图片说明


0

使用Xcode 11.1,仅执行Clean Build Folder或删除派生数据不足以修复自动完成功能。

只有在重新启动我的Mac上,一切都恢复正常


0

如果您对奇怪的完成/自动完成/智能化有疑问(不显示诸如委托和数据源协议方法之类的默认内容),只需更改目标(例如,从模拟器iPhone 8到真实设备),构建项目并切换回原始目标。

与Interface Builder(故事板)的问题类似,该问题不会显示任何内容,而是在您选择视图的任何部分时仅显示“未选择任何内容”。只需切换到其他Xib / Storyboard(甚至创建新的),检查它是否在那里工作,然后再切换回去即可。

这些变通办法对我都有效(在Xcode 10.2.1上的一个项目中一天都遇到了两个问题)。从我在所有互联网论坛上看到的来看,这些似乎是自Xcode 6.x以来从未修复的错误。

干杯!


0

在我的情况下(Xcode 11.1),当我使用此命令停止Xcode自动索引时,发生了这种情况defaults write com.apple.dt.Xcode IDEIndexDisable -bool true

所以我回滚了defaults write com.apple.dt.Xcode IDEIndexDisable -bool false。然后重新启动macOS并再次运行Xcode。


0

Xcode 11.3也有同样的问题。上面没有任何帮助,事实证明我有构建错误。只需修复构建错误,自动补全将再次起作用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.