select不是可以重命名的typesXcode 7

尝试通过在@interface之后select类名( ViewController )来重命名类:

 @interface ViewController : UIViewController 

右键单击,select重构 – >重命名结果在以下错误警报窗口中:

在这里输入图像说明

这在Xcode 6中工作得很好,这是一种回归? 我试过Xcode 4这个解决scheme无济于事。 任何人都知道任何工作?

是的,重构在Xcode 7中被严重破坏了。

我尝试重命名属性,方法和类时发现类似的问题。 昨天我下载了7.1.1,希望可能有一些改进,但目前为止还没有。

我在Xcode 7.1.1的Objective-C中的单个视图项目中进行了一些testing,结果如下:

  1. 如果您尝试重命名具有IBOutlet关键字的属性,它将失败;
  2. 如果您尝试重命名另一个不是IBOutlet的属性,但是在它的声明上方有任何属性是IBOutlet,则重命名将失败;
  3. 如果您尝试重命名在IBOutlet属性下方声明的方法,并右键单击.h文件中的方法,则重命名将失败;
  4. 如果您尝试重命名#import一个在头文件中包含一些IBOutlet声明的类,重命名将失败 (突出显示,因为是这种情况,原始问题是关于)。

幸运的是我也find了一些解决方法:

  1. 如果您移动IBOutlet声明上方的属性声明,重命名将成功;
  2. 如果您需要重命名IBOutlet – 您可以将其移动到所有其他IBOutlet之上,并在重命名之前删除它的IBOutlet关键字。 重命名将成功(并将在Storyboard中对其进行重命名),然后您可以添加IBOutlet关键字;
  3. 如果您将方法的声明移到任何IBOutlet属性上,则重命名将从.h文件获得成功,但是,如果在.m文件中select时尝试重命名它,似乎也可以工作(即使方法声明为.h文件下面的IBoutlet属性);
  4. 重命名使用IBOutlets导入另一个类的类时,可以执行以下操作 – 将另一个类的IBOutlet从.h文件移动到.m文件。 然后重命名作品。 或者,在重命名之前删除所有IBOutlet关键字,然后将其添加回来。

注意:当我说重命名成功时,我的意思是 – 它不会显示“select不是可以重命名的types”。 但大部分时间仍然不能顺利运行:

  1. 它不显示文件中的更改,就像以前一样;
  2. 它可能会抱怨文件已被另一个应用程序修改,而Xcode有未保存的更改。 正如我所发现的,通常你需要select“Keep Xcode Version”。
  3. 可能无法重命名所有已使用的文件中的属性。 这是最重要的,在某些情况下,所有的解决方法都是无用的。 具体来说,我已经看到了,当我用上面描述的方法重命名IBOutlet属性。

希望能帮助到你 :)

解决这个问题的一种方法是在Xcode中纠正这个问题,就是向头文件(在@interface行上面的一个单独的行中)添加一个前向声明。 喜欢这个:

 @class ClassName 

添加完成后,对其进行重命名,而不是@interface行。 重命名后,您可以删除前向声明