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


112

XcodeでRefactor ...がグレー表示されている(無効になっている)のはなぜですか?

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

回答:


181

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


私のクラスのヘッダーファイルには@interfaceのみがあり、@ classはありません。しかし、@ interfaceの後に記号を選択しても機能するようです。
エリオット

3
@class if前方宣言の場合…s
ジョナサンスターリング

これもかなり長い間私を悩ませてきました。ありがとう!
ジョナタンヘドボルグ2009

これでもxcode 4のリファクタリングは有効になりません。なぜAppleがリファクタリングのことを改善しないのか、私は絶望的になってきています。フォローするEclipse、物事のやり方があります!
karim

@karim-Xcodeでは機能しません。毎回機能する回避策については、以下の私の回答を参照してください
Adam

26

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


非常に悲しい、ほぼ2年後、それでもObjective-Cオブジェクトはリファクタリングされません。
クリストファーコットン

@christophercotton約8年後に試してみてください。まだ実装されていません。
アレックス

7

影響を受けるファイル(おそらくクラスが含まれているファイル)が保存されていない場合も、リファクタリングが無効になる可能性があります。


1
Interface Builderでxibファイルを保存すると、Xcodeを再起動しても役に立たなかったリファクタリングが再度有効になりました。
Vincent Gable

1
+1。XCodeの一部のコーナーにはまだ荒い領域があり、これはその1つです。保存によってリファクタリングが有効にならない場合、リビルドによって有効になることがあります。
メモン

6

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

回避策は常に(Appleのコードが失敗した場合でも100%機能します)

  1. shift-command-fを使用して、ファイルのすべての使用法を検索します
  2. 検索設定で「置換」を選択します
  3. 「すべて置換」
  4. .hファイルに対して次の操作を行い、.mファイルがある場合はそれを繰り返します。
    1. 元のファイルを右クリックして、「ファインダーに表示」を選択します
    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の "Refactor-> Rename"を使用して最新のxcodeでリファクタリングを試したところ、失敗しました-再び!

(今回は誤ったエラー:「言語を判別できません」、Appleが間違ったテキストを配置したエラーメッセージの1つ)


はい、私は最近これを試しました(2014年5月)。Xcodeの公式の「リファクタリング」メニューオプションはまだ壊れてます。それでもソースコード壊れます。Appleのスタッフがこれに悩まされないことに驚いています。
アダム14

3

私はファインダーで自分のプロジェクトに行き、情報取得してファイル名を変更します

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

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

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


2

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


1

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


1

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

@interface YourClassName

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

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


0

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

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

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


-1

リファクタリングが機能する最初にプロジェクトナビゲーターでファイル名を変更した場合。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.