Cambiar el nombre de una clase en Xcode: Refactor ... está atenuado (desactivado). ¿Por qué?

112

¿Por qué Refactor ... está atenuado (deshabilitado) en Xcode?

Me gustaría cambiar el nombre de una clase.

Elliot
fuente

Respuestas:

181

Seleccione el símbolo de la clase en su archivo de encabezado, es decir, el bit que sigue @interface. Entonces las cosas de refactorización deberían estar habilitadas.

Noah Witherspoon
fuente
El archivo de encabezado de mi clase solo tiene @interface, no @class. Pero seleccionar el símbolo después de @interface parece funcionar.
Elliot
3
@class si para declaraciones futuras… s
Jonathan Sterling
Esto también me ha estado molestando durante bastante tiempo. ¡Gracias!
Jonatan Hedborg
Incluso esto no permite la refactorización en xcode 4. Me estoy volviendo desesperado, ¿por qué Apple no mejora sus cosas de Refactorización? Hay Eclipse a seguir, ¡cómo hacer las cosas!
karim
@karim: nunca funcionó en Xcode, vea mi respuesta a continuación para obtener una solución que funciona siempre
Adam
26

Si está utilizando Objective-C ++ (es decir, mezcla Objective-C con código C ++), la refactorización está deshabilitada en xcode ya que no admite la refactorización del código C ++.

Volker Voecking
fuente
Muy triste, casi 2 años después y todavía no refactoriza los objetos Objective-C.
christophercotton
@christophercotton Pruébelo casi 8 años después y todavía no está implementado.
Alex
7

Refactor también puede estar deshabilitado si los archivos afectados (lo más probable es que el archivo con su clase) no se guarden.

klaaspieter
fuente
1
Guardar un archivo xib en Interface Builder volvió a habilitar la refactorización para mí, cuando incluso relanzar Xcode no estaba ayudando, ¡gracias!
Vincent Gable
1
+1 para esto. Algunas esquinas de XCode todavía tienen áreas irregulares y esta es una de ellas. A veces, si guardar no permite la refactorización, la reconstrucción sí lo hará.
memmons
6

He estado usando Xcode durante 5 años y la refactorización nunca ha funcionado correctamente (¡incluso xcode 4.6 tiene errores importantes en los que corromperá su código fuente!).

La solución siempre ha sido (todavía funciona al 100%, incluso en los casos en que falla el código de Apple)

  1. use shift-command-f para encontrar todos los usos del archivo
  2. seleccione "reemplazar" en la configuración de búsqueda
  3. "reemplaza todo"
  4. haga lo siguiente para el archivo .h, y REPETIRLO PARA EL ARCHIVO .m (si tiene uno):
    1. haga clic con el botón derecho en el archivo original y seleccione "mostrar en el buscador"
    2. eliminar el archivo de xcode (seleccione "eliminar solo referencias" cuando se le solicite)
  5. cambie el nombre del .h (y .m si tiene uno) en el Finder
  6. en Xcode, seleccione "Producto -> (mantenga presionada la tecla Alt) -> Limpiar carpeta de compilación"
  7. salga de xcode (por lo general, puede salirse con la suya sin hacer esto, pero NOTA: hay algunos otros errores IMPORTANTES en Xcode donde se bloquea si no lo hace)
  8. reabrir xcode
  9. arrastre / suelte el .hy .m de nuevo en Xcode
  10. espere unos segundos (algunos de los métodos centrales de Xcode son asincrónicos, lo que le permite corromper su proyecto)
  11. finalmente, cuando parece que no hace nada (y su disco duro ya no hace ruido): cmd-b para reconstruir

Tengo una tasa de éxito del 100% con este método. Intenté refactorizar con "Refactor -> Rename" de Apple en el último xcode y fallé, ¡de nuevo!

(esta vez con el error incorrecto: "No se puede determinar el idioma de", uno de esos mensajes de error donde Apple colocó el texto incorrecto en su lugar)

Adán
fuente
Sí, probé esto recientemente (mayo de 2014) y la opción de menú oficial de "refactorización" de Xcode todavía está rota, todavía corrompe su código fuente. Me sorprende que al personal de Apple no le moleste esto.
Adam
3

Voy a mi proyecto en el buscador, luego cambio el nombre de los archivos obteniendo información .

Después de eso, en xcode -> Project Navigator elimino los archivos.

Al final, hago clic derecho en la clase y Agregar archivos a ... , y agrego estos archivos nuevamente.

Funcionó para mí.

compensar
fuente
2

Para mí, me di cuenta de que Refactor estaba deshabilitado porque el proyecto de Xcode que había abierto hacía referencia a un SDK base que faltaba. Edite la configuración del proyecto y, en la pestaña Construir, configure el SDK base en uno que tenga (como para mí, esto era iOS 4.2). Esto habilitó Refactor para mí.

user591345
fuente
1

Además, podría suceder que haya cambiado el nombre del archivo de la clase, ya sea fuera de xcode o haciendo ctrl-clic en el nombre del archivo y luego renombrándolo. xcode se niega a refactorizar si el nombre del archivo no coincide con el nombre de la clase.

carlos_ms
fuente
1

Vaya al archivo de encabezado de su clase y busque la línea que se parece a esto:

@interface YourClassName

Haga clic derecho en el símbolo de la clase (por ejemplo, YourClassName) y debería poder seleccionar Refactor -> Cambiar nombre ...

Acabo de probar esto y funciona en Xcode 5.

objetivo fácil
fuente
0

Tuve este problema también. Intenté encontrar los SDK que faltaban, guardé archivos y busqué el código Objective-C ++ como se mencionó anteriormente, y todo lo que necesité para arreglar mi máquina fue reiniciar XCode.

Parece un poco con errores todavía.

Por cierto, esto fue para XCode 4.0.1

gdavis
fuente
-1

La refactorización funciona si primero cambia el nombre del archivo en el navegador de proyectos.

Chris
fuente