web-dev-qa-db-ja.com

Xcodeでクラスの名前を変更:リファクタリング...はグレー表示(無効)です。どうして?

Xcodeでリファクタリング...がグレー表示(無効)になっているのはなぜですか?

クラスの名前を変更したいのですが。

111
Elliot

ヘッダーファイルでクラスのシンボル、つまり@interfaceの直後のビットを選択します。次に、リファクタリングを有効にする必要があります。

180

Objective-C++を使用している場合(つまり、Objective-CとC++コードを混合している場合)、C++コードのリファクタリングをサポートしていないため、リファクタリングはxcodeで無効になっています。

26
Volker Voecking

影響を受けるファイル(ほとんどの場合、クラスを含むファイル)が保存されていない場合、リファクタリングは無効になっている可能性があります。

7
klaaspieter

私はもう5年間Xcodeを使用していますが、リファクタリングは正しく機能していません(xcode 4.6でもソースコードが破損するという大きなバグがあります!)。

回避策は常にされています(Appleのコードが失敗した場合でも、100%動作します)

  1. shift-command-fを使用して、ファイルのすべての使用を検索します
  2. 検索設定で「置換」を選択します
  3. 「すべてを置き換える」
  4. .hファイルに対して以下を実行し、.mファイルに対してもそれを繰り返します(ある場合):
    1. 元のファイルを右クリックし、「Finderで表示」を選択します
    2. xcodeからファイルを削除します(尋ねられたら「参照のみを削除」を選択します)
  5. finderで.h(および存在する場合は.m)の名前を変更します
  6. xcodeで、「製品->(Altを押したまま)->ビルドフォルダーの消去」を選択します。
  7. xcodeを終了します(通常、これを行わずに済ますことができます-ただし、これを行わないと、Xcode自体がクラッシュする主要なバグがいくつかあります)
  8. xcodeを再度開きます
  9. .hと.mをドラッグしてXcodeに戻します
  10. 数秒待ちます(Xcodeのコアメソッドの一部は非同期です-プロジェクトが破損する可能性があります)
  11. 最後に、何もしていないように思える(そして、ハードディスクがもう音を立てていない)とき:cmd-b to re-build

この方法での成功率は100%です。 Appleの「リファクタリング->名前変更」で最新のxcodeでリファクタリングを試みたところ、失敗しました-再び!

(今回は誤ったエラー:「言語を特定できません」、Apple間違ったテキストを所定の場所に置いたエラーメッセージ)

6
Adam

Finderでプロジェクトに行き、get infoでファイル名を変更します。

その後、xcode-> Project Navigatorでファイルを削除します。

最後に、クラスとファイルを...に追加を右クリックして、これらのファイルを再度追加します。

それは私のために働いた。

3
offset

私にとっては、開いていたXcodeプロジェクトが見つからないBase SDKを参照していたため、Refactorが無効になっていることに気付きました。プロジェクト設定を編集し、「ビルド」タブでベースSDKをあなたが持っているものに設定します(私にとってこれはiOS 4.2でした)。これにより、リファクタリングが可能になりました。

2
user591345

クラスのヘッダーファイルに移動して、次のような行を見つけます。

@interface YourClassName

クラスシンボル(例:YourClassName)を右クリックすると、[リファクタリング]-> [名前の変更...]を選択できるはずです。

これを試したところ、Xcode 5で動作します。

1
easytarget

また、クラスのファイル名をxcodeの外部で変更するか、Ctrlキーを押しながらファイル名をクリックして名前を変更することもあります。ファイル名がクラス名と一致しない場合、xcodeはリファクタリングを拒否します。

0
carlos_ms

この問題もありました。上記のように、不足しているSDKの検索、ファイルの保存、Objective-C++コードの検索を実行しましたが、マシンを修正するのに必要なのはXCodeの再起動だけでした。

まだ少しバグがあるようです。

ところで、これはXCode 4.0.1用でした

0
gdavis