Xcode卡在索引上

146

我已经为这个项目工作了2个月,但是因为Xcode卡在“索引”上而突然停止工作。我无法再构建该项目。如果我尝试构建,Xcode会冻结,我必须强制退出。这只发生在这个项目中。

我尝试清除所有派生数据,但没有帮助。

我正在使用Xcode 4.5.2。

有任何想法吗?


2
苹果及其强大的Xcode 5在同一问题上存在困扰。 - Coldsteel48
顺便说一句,对我来说在 MAC 上更改日期解决了问题,(不知道为什么和如何解决的问题,但确实解决了问题) - Coldsteel48
尝试了所有的方法,但都不起作用。老实说,Xcode从第一个版本开始就存在这个问题。而且它会突然出现,没有任何原因。 - Bagusflyer
2
我在Xcode 9.1上遇到了这个问题。四年过去了,他们仍然有同样的问题 :| - Sabri Meviş
3
Xcode 10 GM也需要翻译 - QED
显示剩余6条评论
40个回答

1
我在一些使用Xcode 9.3.1的项目中遇到了这个问题,我的情况是由于一些Swift代码,Xcode不喜欢而导致的。这个问题很难解决,因为很难找到是哪个文件引起了问题。
当我遇到这个问题时,我会从Xcode项目中删除一些文件(删除引用),然后尝试测试索引是否正常工作。我的处理过程如下:
  1. 删除一些文件
  2. 关闭Xcode
  3. 打开Xcode
  4. 如果索引完成,请尝试重命名某些方法,如果可以工作,则可能是您已删除的文件对Xcode有些奇怪的地方。
在我的情况下,我在同一个文件中有一个带有反应扩展的类定义,由于某种原因,Xcode不喜欢它,我将反应扩展移动到另一个文件中,现在索引工作正常。

这是一个非常好的解决方案,因为它允许在你没有编写代码的情况下识别瓶颈。在我的情况下,这是一个未维护的pod/lib,即使使用了“-Xfrontend -warn-long-expression-type-checking=300”标志也没有输出警告,我花了几天时间才发现它。 - Cédric

0

我在 Swift 2.2 中遇到了同样的问题。

这与一个泛型函数重载有关。

func warnLog() {
    print("Warning line: \(#line) file: \(#file) ")
}

func warnLog<T>(input:T? = nil) -> T? {
    print("Warning line: \(#line) file: \(#file) ")
    return input
}

func warnLog<T>(input:T) -> T {
    print("Warning line: \(#line) file: \(#file) ")
    return input
}

我所需要做的就是移除一个未使用的过载函数。

func warnLog<T>(input:T? = nil) -> T? {
    print("Warning line: \(#line) file: \(#file) ")
    return input
}

0

我知道这是一个相当旧的问题,但是问题仍然存在。以下是我发现的经验。

在NavigationLink内部,我给了一个没有接受参数的View一个参数。它挂起构建和索引,但没有触发编译器错误。那不太好。

以下是我如何重现它。在包含导航视图的顶级视图中,我在堆栈中的列表内使用了以下块。因此,我的顶级视图层次结构类似于(伪代码):

Body {
    VStack {
        [CustomViewForPageHeader]
        List {
            (the code block pasted below)
            (some other things)
        }
    }
}

问题出在这里:

            if 0 < viewModel.taskUpdates.count {
                Section( "Chore updates"){
                    ForEach(viewModel.taskUpdates, id:\.id){ update in
                        if "complete" == update.statusType {
                            NavigationLink {
                                CompletedTaskApprovalView( update: update )
                            } label: {
                                Text(update.formattedMessage)
                                    .padding(.vertical)
                            }
                        }
                        if "reject" == update.statusType {
                            Text(update.formattedMessage)
                                .padding(.vertical)
                        }
                    }
                }
            }

我记得在重构一些数据时删除了参数,但编译器并没有因此而出错,这让我感到沮丧。于是我注释掉了整行代码,使其看起来像这样:

            if 0 < viewModel.taskUpdates.count {
                Section( "Chore updates"){
                    ForEach(viewModel.taskUpdates, id:\.id){ update in
                        if "complete" == update.statusType {
                            NavigationLink {
                                //CompletedTaskApprovalView( update: update )
                            } label: {
                                Text(update.formattedMessage)
                                    .padding(.vertical)
                            }
                        }
                        if "reject" == update.statusType {
                            Text(update.formattedMessage)
                                .padding(.vertical)
                        }
                    }
                }
            }

然后,它出奇迹般地正常工作了。

取消注释并删除参数...

            if 0 < viewModel.taskUpdates.count {
                Section( "Chore updates"){
                    ForEach(viewModel.taskUpdates, id:\.id){ update in
                        if "complete" == update.statusType {
                            NavigationLink {
                                CompletedTaskApprovalView()
                            } label: {
                                Text(update.formattedMessage)
                                    .padding(.vertical)
                            }
                        }
                        if "reject" == update.statusType {
                            Text(update.formattedMessage)
                                .padding(.vertical)
                        }
                    }
                }
            }

whammo, redux, 再来一次,运行得很好。
在重新调整数据模型时,我将所有内容从CompletedTaskApprovalView中剥离出来,所以它现在看起来像这样(字面上只是个占位符):
import SwiftUI
struct CompletedTaskApprovalView: View {
    
    var body: some View {
        Text("Approve chores")
            .font(.title)
    }
}

编译器不应该让我尝试传递参数。所以我觉得这很奇怪,我想知道我的视图代码文件是否存在某种奇怪的非可见损坏。在顶层视图文件中,我在底部添加了一个新视图(SomeTestView)...
struct SomeTestView: View {
    var body: some View {
        Text("this is just a thing")
    }
}

并将其添加到我的循环中...

            if 0 < viewModel.taskUpdates.count {
                Section( "Chore updates"){
                    ForEach(viewModel.taskUpdates, id:\.id){ update in
                        if "complete" == update.statusType {
                            NavigationLink {
                                //CompletedTaskApprovalView()
                                SomeTestView()
                            } label: {
                                Text(update.formattedMessage)
                                    .padding(.vertical)
                            }
                        }
                        if "reject" == update.statusType {
                            Text(update.formattedMessage)
                                .padding(.vertical)
                        }
                    }
                }
            }

运行正常。

在上面的实例化中添加了一个参数(但没有在视图的结构定义中添加参数)...... 它的行为与原始问题相同-挂起了构建和索引,似乎无休止地,并且从未出现我预期的参数错误。

            if 0 < viewModel.taskUpdates.count {
                Section( "Chore updates"){
                    ForEach(viewModel.taskUpdates, id:\.id){ update in
                        if "complete" == update.statusType {
                            NavigationLink {
                                //CompletedTaskApprovalView()
                                SomeTestView( fish: "sandwich" )
                            } label: {
                                Text(update.formattedMessage)
                                    .padding(.vertical)
                            }
                        }
                        if "reject" == update.statusType {
                            Text(update.formattedMessage)
                                .padding(.vertical)
                        }
                    }
                }
            }

这太离奇了,让人百分之百的失望。我不想再深入诊断它了,但是...如果还有人遇到这种情况,请尝试一下;仔细检查您的参数和声明,也许您会发现类似的问题。

奇怪。令人沮丧。困惑。烦人。


0
在一个SwiftUI项目中遇到了这个问题。结果发现我的一个SwiftUI视图有一个声明不正确的变量。我原本写成了:
@EnvironmentObject var roomViewModel

我需要的地方:

@EnvironmentObject var roomViewModel: RoomViewModel

没有编译器错误,只是无尽的索引。当我修复了错误后,项目很快就构建完成了。


0
这个问题发生在我身上,但是它是一个错误消息,没有立即出现,而是卡在索引循环中。我在ViewModel中将一个对象从对象数组更改为单个对象,但是忘记在View中更新我的代码。这导致了循环索引,因为它无法将对象数组解析为视图(因为它不再存在!)。我只需要删除那段代码,用单个对象的值替换它。

0

我尝试了所有列出的方法,但索引仍然冻结。这个方法帮助了我:如果你的索引被冻结,并且有一个或多个Swift进程占用了你99%的CPU - 只需杀死这些Swift任务,等待一会儿,进度就会继续。这可能需要重复多次,直到完成为止,在我的情况下,我杀死了7次进程,但最终,索引已经完成!


0
最近在XCode 7.3.1上遇到了这个问题 - 我注意到RAM使用率达到了100%,并且CleanMyMac3也无法解决。但是,在我重新启动电脑后,问题神奇地自行解决了。然而,公平地说,我已经尝试了接受的答案,所以在重新启动之前,您应该先尝试同样的方法,以防万一 :-)

0
对我来说,问题是我同时在主编辑器助理编辑器中打开了相同的文件。一旦我关闭了助理编辑器,问题就解决了。(Xcode版本7.2.1)

0

如果您的Xcode上还有其他应用程序在运行,请先停止它,然后再停止正在运行的应用程序。这样您就可以继续进行索引。


0

这对我有效

  1. 重新安装pod。 pod install
  2. 运行另一个包含pod文件的简单项目。
  3. 现在运行您的项目。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接