2009-06-14 5 views

risposta

178

Selezionare il simbolo della classe nel suo file di intestazione, ovvero il bit subito dopo @interface. Quindi il materiale di refactoring dovrebbe essere abilitato.

+0

Il file di intestazione della mia classe ha solo @interface, no @class. Ma selezionare il simbolo dopo @interface sembra funzionare. – Elliot

+3

@class se per le dichiarazioni anticipate ... s –

+0

Anche questo mi ha infastidito per parecchio tempo. Grazie! –

25

Se si utilizza Objective-C++ (cioè mix Objective-C con codice C++), il refactoring è disabilitato in xcode poiché non supporta il refactoring del codice C++.

+0

Sì ed è davvero fastidioso !!! –

+0

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

+0

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

7

Il Refactor può anche essere disabilitato se i file interessati (molto probabilmente il file con la classe in esso contenuto) non vengono salvati.

+1

Il salvataggio di un file xib in Interface Builder ha riattivato Refactoring per me, anche quando il riavvio di Xcode non ha aiutato, grazie! –

+1

+1 per questo. Alcuni angoli di XCode hanno ancora delle aree ruvide e questo è uno di questi. A volte, se il salvataggio non abilita il refactoring, la ricostruzione funzionerà. – memmons

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 Crea imposta l'SDK di base su una che hai (come per me era iOS 4.2). Questo ha abilitato Refactor per me.

0

Inoltre, potrebbe capitare che il nome del file sia stato rinominato, fuori da xcode o ctrl-clic sul nome del file e quindi rinominarlo. xcode rifiuta di refactoring se il nome del file non corrisponde al nome della classe.

0

Aveva anche questo problema. Ho provato a cercare gli SDK mancanti, a salvare i file e a cercare il codice Objective-C++ come menzionato sopra, e tutto ciò che è servito per sistemare la mia macchina era il riavvio di XCode.

Sembra ancora un po 'bacato.

BTW, questo è stato per XCode 4.0.1

3

ho intenzione di mio progetto in Finder, quindi modificare il nome dei file da ottenere informazioni.

Successivamente, a xcode -> Project Navigator Elimina i file.

Alla fine, clicco sulla classe e Aggiungi file a ... e aggiungi di nuovo questi file.

Ha funzionato per me.

6

Utilizzo Xcode da 5 anni e il refactoring non ha mai funzionato correttamente (anche xcode 4.6 ha bug importanti in cui danneggia il codice sorgente!).

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

  1. uso Maiuscole-Comando-F per trovare tutti gli usi del file
  2. selezionare "sostituire" in le impostazioni di ricerca
  3. "replace-all"
  4. effettuare le seguenti operazioni per il file .h e RIPETIRLO PER.m FILE (se ne avete uno):
    1. fare clic destro sul file originale, e selezionare "Mostra nel Finder"
    2. eliminare il file da Xcode (selezionare "eliminare i riferimenti solo" quando gli viene chiesto)
  5. rinominare il .h (e .m se ne hai uno) nel Finder
  6. in Xcode, seleziona "Prodotto -> (tieni premuto Alt) -> Pulisci cartella"
  7. esci xcode (di solito puoi scappare con facendo questo - ma NOTA: ci sono alcuni altri bug MAJOR in Xcode dove si blocca se stesso se non lo fai)
  8. riaprire Xcode
  9. drag/cadere il .he .m nuovo in Xcode
  10. attendere alcuni secondi (alcuni dei metodi principali di Xcode sono asincrone - permettendo così di danneggiare il progetto)
  11. infine, quando sembra che non stia facendo nulla (e il tuo hard disk non fa più rumore): cmd-b per ricostruire

Ho un tasso di successo del 100% con questo metodo. Ho appena provato a rifattorizzare con Apple "Refactor -> Rename" nell'ultimo xcode e non è riuscito - ancora!

(questa volta con l'errore non corretto: "Impossibile determinare la lingua di", uno di quei messaggi di errore in cui Apple ha messo il testo sbagliato nel posto)

+0

+1. Questo è diventato il mio metodo preferito. – tambykojak

+0

Sì, l'ho provato di recente (maggio 2014) e l'opzione "refactoring" del menu Xcode ufficiale è * ancora * interrotta, * ancora * corrompe il codice sorgente. Sono sorpreso che lo staff Apple non ne sia infastidito. – Adam

1

Vai a file di intestazione la classe e trovare la linea che sembra simile a questo:

@interface YourClassName 

clic destro sul simbolo di classe (ad es YourClassName) e si dovrebbe essere in grado di selezionare Refactor -> Rinomina ...

ho appena provato questo e funziona in Xcode 5.

-1

Refactoring funziona Se si modifica prima il nome del file nella navigazione di progetto.