Rinomina una classe in Xcode: Refactor ... è disattivato (disabilitato). Perché?


112

Perché Refactor ... è disattivato (disabilitato) in Xcode?

Vorrei rinominare una classe.

Risposte:


181

Seleziona il simbolo della classe nel suo file di intestazione, cioè il bit subito dopo @interface. Quindi le cose di refactoring dovrebbero essere abilitate.


Il file di intestazione della mia classe ha solo @interface, nessuna @class. Ma la selezione del simbolo dopo @interface sembra funzionare.
Elliot

3
@class se per dichiarazioni future ... s
Jonathan Sterling

Anche questo mi ha infastidito per un bel po 'di tempo. Grazie!
Jonatan Hedborg

Anche questo non abilita il refactoring in xcode 4. Sto diventando senza speranza, perché Apple non migliora le loro cose di refactoring. C'è Eclipse da seguire, come fare le cose!
karim

@karim - non ha mai funzionato in Xcode, vedi la mia risposta di seguito per una soluzione alternativa che funziona ogni volta
Adam,

26

Se stai usando Objective-C ++ (cioè mescola Objective-C con codice C ++), il refactoring è disabilitato in xcode poiché non supporta il refactoring del codice C ++.


Molto triste, quasi 2 anni dopo e ancora non si rifattorizza gli oggetti Objective-C.
christophercotton

@christophercotton Prova quasi 8 anni dopo, e ancora non è implementato.
Alex

7

Il refactoring potrebbe anche essere disabilitato se i file interessati (molto probabilmente il file con la tua classe in esso) non vengono salvati.


1
Il salvataggio di un file xib in Interface Builder ha riattivato il refactoring per me, quando anche il riavvio di Xcode non ha aiutato, grazie!
Vincent Gable

1
+1 per questo. Alcuni angoli di XCode hanno ancora aree ruvide e questa è una di queste. A volte, se il salvataggio non abilita il refactoring, la ricostruzione lo farà.
memmons

6

Sto usando Xcode da 5 anni ormai e il refactoring non ha mai funzionato correttamente (anche xcode 4.6 ha grossi bug in cui corromperà il tuo codice sorgente!).

La soluzione alternativa è sempre stata (funziona ancora al 100%, anche nei casi in cui il codice Apple fallisce)

  1. usa maiusc-comando-f per trovare tutti gli usi del file
  2. seleziona "sostituisci" nelle impostazioni di ricerca
  3. "sostituisci tutto"
  4. eseguire le seguenti operazioni per il file .h e RIPETILO PER IL FILE .m (se ne hai uno):
    1. fai clic con il pulsante destro del mouse sul file originale e seleziona "mostra nel Finder"
    2. elimina il file da xcode (seleziona "elimina solo riferimenti" quando richiesto)
  5. rinomina .h (e .m se ne hai uno) nel Finder
  6. in Xcode, seleziona "Prodotto -> (tieni premuto Alt) -> Pulisci cartella build"
  7. esci da xcode (di solito puoi farla franca senza farlo, ma NOTA: ci sono altri bug PRINCIPALI in Xcode in cui si blocca se non lo fai)
  8. riapri xcode
  9. trascina / rilascia di nuovo .h e .m in Xcode
  10. attendi qualche secondo (alcuni dei metodi principali di Xcode sono asincroni, permettendogli di danneggiare il tuo progetto)
  11. infine, quando sembra che non stia facendo nulla (e il tuo disco rigido non fa più rumore): cmd-b per ricostruire

Ho una percentuale di successo del 100% con questo metodo. Ho appena provato il refactoring con "Refactor -> Rename" di Apple nell'ultimo xcode e non è riuscito - di nuovo!

(questa volta con l'errore errato: "Impossibile determinare la lingua di", uno di quei messaggi di errore in cui Apple ha inserito il testo sbagliato)


Sì, l'ho provato di recente (maggio 2014) e l'opzione di menu "refactor" ufficiale di Xcode è ancora rotta, corrompe ancora il codice sorgente. Sono sorpreso che il personale Apple non sia infastidito da questo.
Adam

3

Vado al mio progetto su Finder, quindi cambio il nome dei file per ottenere informazioni .

Dopodiché, in xcode -> Project Navigator elimino i file.

Alla fine, faccio clic con il pulsante destro del mouse sulla classe e su Aggiungi file a ... e aggiungo di nuovo questi file.

Ha funzionato per me.


2

Per me ho capito che Refactor era disabilitato perché il progetto Xcode che avevo aperto faceva riferimento a un SDK di base che mancava. Modifica le impostazioni del progetto e nella scheda Costruisci imposta l'SDK di base su quello che hai (come per me questo era iOS 4.2). Questo ha abilitato Refactor per me.


1

Inoltre, potrebbe accadere che tu abbia rinominato il nome del file per la classe, al di fuori di xcode o facendo ctrl-clic sul nome del file e quindi rinominandolo. xcode rifiuta di effettuare il refactoring se il nome del file non corrisponde al nome della classe.


1

Vai al file di intestazione della tua classe e trova la riga simile a questa:

@interface YourClassName

Fai clic con il pulsante destro del mouse sul simbolo della classe (ad esempio YourClassName) e dovresti essere in grado di selezionare Refactoring -> Rinomina ...

L'ho appena provato e funziona in Xcode 5.


0

Ho avuto anche questo problema. Ho cercato di trovare gli SDK mancanti, salvare i file e cercare il codice Objective-C ++ come menzionato sopra, e tutto ciò che è servito per riparare la mia macchina è stato il riavvio di XCode.

Sembra ancora un po 'buggy.

BTW, questo era per XCode 4.0.1


-1

Il refactoring funziona se si cambia prima il nome del file nel navigatore del progetto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.