Cómo cambiar el nombre de la propiedad IBOutlet sin perder la connection

Trabajo con un proyecto antiguo y en alguna parte del proyecto, la convención de nomenclatura no es buena, así que quiero cambiarla.
Por ejemplo:

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

Sé que puedo eliminar el IBOutlet luego volver a conectar, pero puede llevar mucho time y fácil error si descuidado

¿Alguna manera segura y rápida de hacerlo?

He intentado Refactor -> Cambiar nombre, pero no funciona y me da una advertencia

introduzca la descripción de la imagen aquí

Cualquier ayuda o sugerencia sería muy apreciada.

Esto es lo que suelo hacer

  1. Haga clic derecho en el nombre IBOutlet, luego select Buscar text seleccionado en el área de trabajo

introduzca la descripción de la imagen aquí

  1. Haga clic en search, luego select replace

introduzca la descripción de la imagen aquí

3. Cambie al nombre que desee

4. Puede hacer clic en Reemplazar todos si está seguro. También puede hacer clic en vista previa para replace todos los cambios.

introduzca la descripción de la imagen aquí

Xcode 9, Refactor> Rename

Nuevo en Xcode 9, puede cambiar el nombre de una salida (o acción) en el código y el guión gráfico al mismo time.

* DESCARGO DE RESPONSABILIDAD: Esta function solo funciona en Xcode 9 (lanzado en septiembre de 2017) y superior. Asegúrate de hacer una copy de security de tu proyecto antes de utilizarlo. Después de realizar los cambios de nombre de salida, pruebe las pantallas afectadas para asegurarse de que no haya problemas. Probé esto en un proyecto de ejemplo Objective C con éxito, pero podría causar problemas en proyectos existentes y más complejos.

Para cambiar el nombre de una salida …

1. Navegue a la salida en el file de encabezado

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

2. Haga clic con el button derecho en el tomastream, select "Refactor> Rename …" .

Haga clic derecho en el enchufe

3. Cambie el nombre de la salida

4. Seleccione el button "Renombrar" o la tecla Intro

Cambiar el nombre de la salida

La salida se renombra en el código y el storyboard

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

Si está utilizando Xcode Versión 9.0 ( versión 9A235 o beta anterior) y no desea bloquear en UIApplicationMain() , necesitará realizar los siguientes pasos para cambiar el nombre de una variable de instancia de IBOutlet . (vea abajo)

Pasos :

  1. Haga clic derecho en la variable de instancia de salida
  2. Seleccione "Refactor -> Rename …"
  3. Ingrese un nuevo nombre Cambie todos ellos

hacer

  1. Haga clic derecho en el file '.xib' relacionado (o files) en la list de files del proyecto
  2. Seleccione "Abrir como -> Código fuente" (le mostrará el XML luego …)
  3. Busque y reemplace el nombre de variable anterior con nuevo en .xib

mientras (existen files .xib sin tocar)

Perdí horas intentando descubrir por qué la aplicación se UIApplicationMain() en UIApplicationMain() después de hacer una refactorización masiva de nombres de variables. No hay cambios en la lógica, solo horas de documentation, limpieza de la estructura para facilitar la lectura y limpieza de nombres … no vale la pena realizar testings con normalidad, pero cuando decidí ejecutar … BOOM

Resulta que la "liberación" (ahem) de Xcode 9 no logra refacturar los nombres de las variables de instancia de IBOutlet, por lo que has releído a interferir manualmente los files .xib. La refacturación verdadera haría todos los cambios necesarios en el proyecto …

Aquí hay un ejemplo de cómo y qué hacer para probar la regresión.

Ejemplo:

Seleccione la variable de instancia IBOutlet , luego haga clic derecho, select Refactor -> Rename …:

(pasos 1 y 2) Refactor -> Renombrar ...

Ahora cambia el nombre. (para el ejemplo de textFieldController a editTextFieldController ):

(paso 3) introduzca la descripción de la imagen aquí

Ahora, para la parte crítica que Xcode descuida, cambie la propiedad de salida personalizada en el XML:

(pasos 4 y 5) introduzca la descripción de la imagen aquí

y luego encuentre la variable original (por ejemplo, textFieldController ) y cámbiela al nuevo nombre de variable (por ejemplo, editTextFieldController )

(paso 6) Edición manual de la propiedad de salida en xib

… y luego, cuando comstack y ejecuta, no lanza una exception / aserción en UIApplicationMain()