重命名Xcode中的一个类:重构...选项为什么是灰色(禁用)?

112

为什么在Xcode中重构...是灰色的(禁用)?

我想要重命名一个类。

11个回答

182

在类的头文件中选择类的符号 - 即在 @interface 之后的位。然后重构工具将启用。


我的类头文件只有@interface,没有@class。但选择@interface后面的符号似乎可以工作。 - Elliot
3
@class 用于前向声明...s - Jonathan Sterling
这个问题困扰了我很长一段时间。谢谢! - Jonatan Hedborg
即使如此,这也无法在Xcode 4中启用重构。我变得绝望了,为什么苹果不改善他们的重构工具呢?有Eclipse可供借鉴,如何操作啊! - karim
@karim - 它在 Xcode 中从未起作用过,请查看下面的答案,以获取每次都有效的解决方法。 - Adam

26

如果您正在使用Objective-C++(即将Objective-C与C++代码混合使用),则在Xcode中不支持重构C++代码,因此重构功能被禁用。


非常遗憾,近两年过去了,它仍然无法重构Objective-C对象。 - christophercotton
@christophercotton 尝试了将近8年,仍然没有被实现。 - Alex

7

如果受影响的文件(最可能是包含您类的文件)未保存,重构也可能被禁用。


1
在Interface Builder中保存xib文件重新启用了重构功能,即使重新启动Xcode也没有帮助,谢谢! - Vincent Gable
1
+1。XCode 的某些角落仍然存在一些粗糙的地方,这就是其中之一。有时候如果保存不会启用重构,重新构建就可以了。 - memmons

6

我已经使用Xcode 5年了,重构从来没有正常工作过(甚至xcode 4.6也有严重的错误,会破坏你的源代码!)。

解决方法一直是:(即使在苹果的代码失败的情况下仍然有效)

  1. 使用Shift-Command-F查找文件的所有用途
  2. 在搜索设置中选择“替换”
  3. “全部替换”
  4. 对.h文件进行以下操作,并为.m文件重复此操作(如果您有一个):
    1. 右键单击原始文件,选择“在finder中显示”
    2. 从xcode中删除文件(在被询问时只选择“仅删除引用”)
  5. 在Finder中重命名.h(如果您有一个还要重命名.m)
  6. 在Xcode中,选择“产品 ->(按住Alt) ->清理构建文件夹”
  7. 退出Xcode(通常您可以不这样做,但请注意:Xcode中还存在一些其他主要错误,如果您不这样做,它会崩溃自己)
  8. 重新打开xcode
  9. 将.h和.m拖放回Xcode
  10. 等待几秒钟(Xcode的某些核心方法是异步的,允许其破坏您的项目)
  11. 最后,当它似乎什么都没做(并且您的硬盘不再发出任何声音):cmd-b重新构建

我用这种方法有了100%的成功率。我刚刚在最新的xcode中尝试使用苹果的“重构 -> 重命名”,但它又失败了!

(这次是错误的:“无法确定语言”,其中之一是Apple放错了文本的那些错误消息)


是的,我最近(2014年5月)尝试了这个,Xcode官方“重构”菜单选项仍然有问题,它仍然会破坏你的源代码。我很惊讶苹果员工对此并不感到困扰。 - Adam

3
我要去我的finder项目,然后通过“获取信息”更改文件名称。
之后,在xcode的“项目导航器”中删除这些文件。
最后,右键单击类,选择“添加文件到...”,然后再次添加这些文件。
这对我有用。

2

我发现Refactor功能被禁用了,因为我打开的Xcode项目引用了一个缺失的基础SDK。在编辑项目设置中,在Build标签页中将Base SDK设置为你拥有的版本(例如对我来说是iOS 4.2)。这样就可以启用Refactor功能。


1
这可能有点晚了,但我偶然发现了这篇文章,因为我无法将我的“ViewController.swift”文件重构为“WhateverViewController.swift”。我尝试在项目导航器中选择该文件,然后从顶部菜单中选择“编辑 -> 重构”,但“重命名”始终是灰色的。

相反,有效的方法是从编辑器中选择ViewController名称。所以如果你有:

class ViewController: UIViewController {
 // Code here...
}

请高亮显示“ViewController”一词,然后从菜单中选择Refactor或右键单击并选择Refactor ->重命名。

希望这有所帮助...


1

打开你班级的头文件并找到类似于以下内容的行:

@interface YourClassName

右键点击类符号(例如:YourClassName),您应该能够选择重构 -> 重命名...

我刚刚尝试了这个,在Xcode 5中可以正常运行。


1

另外,还有可能发生这样的情况:您在Xcode之外更改了类的文件名,或者通过Ctrl单击文件名然后进行重命名操作。 如果文件名与类名不匹配,Xcode将拒绝进行重构。


0

我也遇到了这个问题。我试图找到缺失的SDK、保存文件以及寻找上面提到的Objective-C++代码,但是解决我的问题只需要重新启动XCode。

看起来还有点小问题。

顺便说一下,这是针对XCode 4.0.1的。


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