如何在不丢失连接的情况下重命名IBOutlet属性

时间:2016-05-19 03:18:04

标签: ios xcode

我使用旧项目,在项目的某些部分,命名惯例不好,所以我想改变它。
例如:

@property (weak, nonatomic) IBOutlet UIButton *btnRequestCode;
rename it to -> @property (weak, nonatomic) IBOutlet UIButton *requestCodeButton;

我知道我可以删除IBOutlet然后重新连接,但如果不小心可能需要很多时间且容易犯错误

任何安全快捷的方法吗?

我试过了Refactor - >重命名,但它不起作用并给我一个警告

enter image description here

非常感谢任何帮助或建议。

4 个答案:

答案 0 :(得分:17)

这就是我通常做的事情

  1. 右键单击IBOutlet名称,然后选择在工作区中查找所选文本
  2. enter image description here

    1. 点击查找,然后选择替换
    2. enter image description here

      3.替换为您想要的名称

      4.如果您确定,可以点击全部替换。您还可以单击预览以替换每个更改

      enter image description here

答案 1 :(得分:8)

Xcode 9,Refactor>重命名

Xcode 9中的新功能,您可以同时重命名代码和故事板中的插座(或操作)。

*免责声明:此功能仅适用于Xcode 9(2017年9月发布)及更高版本。确保在使用之前备份项目。更改插座名称后,测试受影响的屏幕以确保没有问题。我在一个示例Objective C项目中成功测试了这个,但它可能会导致现有的,更复杂的项目出现问题。

重命名插座......

1.导航到头文件

中的插座
@property (weak, nonatomic) IBOutlet UIButton *btnRequestCode;

2.右键单击插座,选择“重构>重命名...”

Right click on outlet

3.更改插座名称

4.选择“重命名”按钮或Enter键

Change the outlet name

在代码和故事板中重命名插座

@property (weak, nonatomic) IBOutlet UIButton *requestCodeButton;

答案 2 :(得分:2)

我把我的两分钱。我试图重构几个类似的IBOutlet-s并结束只成功完成一个 - 第一个。 enter image description here

此类型的所有其他商店都会向我提出重构错误: enter image description here

Project和XCode重新加载并不能解决问题。我检查了* .xib源代码 - 第一个很好: enter image description here 我的XCode ver 9.2(9C40b)

答案 3 :(得分:0)

如果您使用的是Xcode版本9.0(发布 9A235或更早版本的测试版)并且您不希望在UIApplicationMain()崩溃,则需要按顺序执行以下步骤重命名IBOutlet实例变量。 (见下文)

<强>步骤

  1. 右键单击插座实例变量
  2. 选择&#34;重构 - &gt;重命名...&#34;
  3. 输入新名称更改所有名称
  4. DO

    1. 右键点击相关的&#39; .xib&#39;项目文件列表中的文件(或文件)
    2. 选择&#34;打开为 - &gt;源代码&#34; (它会显示XML然后......)
    3. 使用.xib
    4. 中的new搜索并替换旧变量名

      while(存在未经修改的相关.xib文件)

      我浪费了几个小时试图找出应用程序在对变量名称进行大规模重构之后在UIApplicationMain()中崩溃的原因。没有逻辑变化,只需几个小时的记录,清理结构的可读性,只是清理名称......不值得正常测试但是当我决定运行时...... BOOM

      事实证明,(ahem)&#34;发布&#34; Xcode 9没有设法实际重构 IBOutlet实例变量名称,所以你降级为手动干扰.xib文件。 真正的重构将在项目中进行所有必要的更改......

      这是一个回归测试的例子,说明如何以及如何做。

      示例:

      选择IBOutlet实例变量,然后右键单击,选择Refactor - &gt;重命名......:

      (第1步和第2步) Refactor -> Rename...

      现在更改名称。 (例如,从textFieldControllereditTextFieldController):

      (第3步) enter image description here

      现在,对于Xcode忽略的关键部分,请更改XML中的自定义出口属性:

      (步骤4和5) enter image description here

      然后找到原始变量(例如textFieldController)并将其更改为新的变量名称(例如editTextFieldController

      (第6步) Hand edit of outlet property in xib

      ...然后当你编译并运行时,它不会在UIApplicationMain()中抛出异常/断言......