在Xcode中重命名一个类:Refactor…变灰(禁用)。为什么?


Answers:


181

在其头文件中选择该类的符号-即紧随其后的位@interface。然后应该启用重构功能。


我班的头文件只有@interface,没有@class。但是在@interface之后选择符号似乎可行。
艾略特

3
@class if forforforwardclarations…s
Jonathan Sterling

这也困扰了我一段时间。谢谢!
乔纳丹·赫德堡2009年

即使这样也不能在xcode 4中启用重构。我变得无望了,为什么苹果不改进其重构功能。有Eclipse要遵循,该怎么做!
karim

@karim-从未在Xcode中使用过,请参见下面的答案,了解每次都可以使用的解决方法
Adam

26

如果您使用的是Objective-C ++(即将Objective-C与C ++代码混合使用),则在xcode中禁用重构,因为它不支持C ++代码的重构。


非常可悲的是,将近2年后,它仍然无法重构Objective-C对象。
christophercotton

@christophercotton尝试将近8年后,仍然没有实现。
亚历克斯(Alex)

7

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


1
将xib文件保存在Interface Builder中对我来说重新启用了重构,即使重新启动Xcode也无济于事,谢谢!
Vincent Gable

1
为此+1。XCode的某些角落仍然具有粗糙区域,这是其中之一。有时,如果保存无法启用重构,则可以进行重构。
记忆

6

我使用Xcode已有5年了,重构从未正常进行(即使xcode 4.6也存在重大错误,会破坏您的源代码!)。

解决方法一直都是(即使在Apple代码失败的情况下,仍然可以100%使用)

  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的“ Refactor-> Rename”进行重构,但是失败了!

(这次出现了错误错误:“无法确定语言”,这是苹果在其中放置了错误文本的错误消息之一)


是的,我最近(2014年5月)尝试了此操作,并且Xcode官方的“重构”菜单选项仍然损坏,它仍会破坏您的源代码。我很惊讶苹果员工没有对此感到困扰。
亚当

3

我要去finder上的项目,然后通过获取信息来更改文件名

之后,在xcode-> Project Navigator中,删除文件。

最后,我在课程上单击鼠标右键,然后将文件添加到...,然后再次添加这些文件。

它为我工作。


2

对我来说,我意识到Refactor被禁用了,因为我打开的Xcode项目引用了缺少的Base SDK。编辑项目设置,然后在构建选项卡中将基本SDK设置为您拥有的一个(对于我来说,这是iOS 4.2)。这为我启用了重构。


1

同样,可能发生了在xcode外部或通过ctrl单击文件名然后重命名该类的文件名的情况。如果文件名与类名不匹配,则xcode拒绝重构。


1

转到您班级的头文件,然后找到与以下内容相似的行:

@interface YourClassName

右键单击类符号(例如YourClassName),您应该能够选择Refactor-> Rename ...

我刚刚尝试过,它可以在Xcode 5中使用。


0

也有这个问题。如上所述,我尝试了查找丢失的SDK,保存文件并寻找Objective-C ++代码的过程,而修复我的机器所需的全部工作就是重启XCode。

看起来还是有点越野车。

顺便说一句,这是为XCode 4.0.1


-1

重构有效如果您首先在项目导航器中更改文件名。

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.