web-dev-qa-db-ja.com

Xcodeのオートコンプリートが期待どおりに機能しない(他のIDEを使用した場合)

最初に、私はFlash Builder(IDE)/ AS3のバックグラウンドを使用しているため、私がObjective-CとXcodeの完全な初心者であることを述べさせてください。私は最近、Objective-Cの学習とXcodeの使用を開始しました。

現在、最初のプログラムを作成していますが、Xcodeのオートコンプリート機能が期待どおりに機能していないことに気づきました。私が使用しているクラスのタイプとは一見無関係のすべての種類の値を示しています。

私が宣言した場合:

NSFileManager *manager;

次に、manager = [NSFileManagerと入力して、ここでcommand + spaceと入力します。defaultManagerが提案の1つであると思います。また、提案はNSFileManagerクラスのメソッドとプロパティのみにする必要があります。これは、私がFlash Builderで使用する方法でした。

これはXcodeのバグなのか、設定の誤りなのか、それともXcodeが機能するはずなのか?

Autocomplete

18
Fréderic Cox

プロジェクトの途中でXcode 4を5にアップグレードし、サブグループ(プロジェクトのサブフォルダーに相当)で作成した新しいファイルがオートコンプリートされず、最上位フォルダーの新しいファイルがオートコンプリートされました。私はこれを次の設定で修正しました:

Build Settings ==> Search Paths ==> Always Search User PathsからYesへ。すべてのファイルがオートコンプリートされます。

16
pjphilc

前述のように here には多くの理由と解決策があります。

私はこの解決策を手伝いました:[設定]> [場所]> [派生データ]に移動します>矢印をクリックしてFinderで開きます。 「Derived Data」という名前のフォルダを削除します。そして、すべてが再び機能します。

9

新しいXcodeバージョンにアップグレードした後、同じ問題が発生しました。何らかの理由で、私にとってうまくいったのはPreferences> Text Editing> Suggest Completions while打ちde-selectingそれからre-selectingそれ。

お役に立てれば。

3
Jacobo Koenig

Xcodeは、可能な限り最善のものが利用できるかという質問に答えています。

問題の一部は、Objective-Cの「実行時に決定されるもの」という性質にあります。コンパイラーは、可能性のあるすべての可能性を提供します。これは通常、予想よりもかなり広い範囲です。これは単にスーパークラス(通常はNSObjectに至るまで)ではなく、同じ名前空間内、またはおそらく同じ名前空間内のものです。 Objective-Cでは、コンパイル時に物事が確定するわけではありません。他の多くの言語と同様に、実行時まで多くが残され、コンパイラーは常に何が利用可能かを判断できない場合があります。あなたが本当にあなたが何をしているかを本当に知っていると信じているだけです。つまり、さまざまなオプションが提示されることになります。

オートコンプリートは、Xcodeの新しいバージョンごとに改善されますが、まだ改善の余地がたくさんあります!ただし、使用するメソッドの正確な名前(または最初の文字も)を思い出せない場合は注意が必要です。これらの場合、ドキュメントに戻ります。

基本的に、可能性を絞り込むまで入力を続けるだけです。また、コード内の構文エラーでトリップする可能性もあります。エラーに続くメソッドは、突然オートコンプリートから見えなくなります。

あなたの問題をもう一度見ると、システムではオートコンプリートがかなり壊れているように見えます-それは通常を超えています。 Xcodeのインデックス作成などが混乱している可能性があります。関連する何かに苦しんでいる可能性があるので、インスピレーションを得るためにいくつかの古い答え herehere を見てください。それが機能しようとしているため、単に設定によって引き起こされる可能性は低いので、何かが破損しているか、構成内の何かが混乱している問題です。

2
Rob Glassey

まず、ちょっとしたヒント:FoundationCocoaを同じファイルにインポートする必要はありません。 Cocoaは「メタフレームワーク」(Appleは「傘フレームワーク」と呼んでいます)です。つまり、それ自体はフレームワークではなく、代わりにCocoaをインポートすることはFoundationAppKit、およびCoreData(これは単なるショートカットです。1つインポートすると、3つ取得されます)。

今あなたの問題に関して:CocoaまたはFoundationをXcodeプロジェクトに追加していない可能性がありますか? Xcodeは、ソースコードファイルおよびXcodeプロジェクトによって参照されるフレームワーク内の補完のみを検索します。フレームワークのヘッダーはいつでもインポートできます。コンパイラーはそれらを見つけます(常に、選択したSDKのSystem/Library/Frameworksディレクトリでフレームワークを検索するため)。ただし、Xcode自体は、プロジェクトによって直接参照されるフレームワークのヘッダーのみを検索しますコード補完を実行するとき。 Foundationが参照されていない場合、XcodeはNSFileManagerのオブジェクト宣言を認識しないため、NSFileManagerが実際にObj-Cオブジェクトであるか、またはそれが持っているメソッド。ビルドプロセスのリンクフェーズにフレームワークを追加すると、Xcodeはプロジェクトにフレームワーク参照を自動的に追加します。リンカーエラーなしで実際にアプリのコードを作成できますか?

2
Mecki

この問題は、プロジェクトが適切にインデックス化されていない場合に発生する可能性があります。

まず、インデックス作成が有効になっていることを確認します。

アプリケーション-> ユーティリティ->ランチターミナルとタイプ:

defaults write com.Apple.dt.XCode IDEIndexDisable 0 

次に、DerivedDataフォルダーに移動してファイルを削除します。

Finderを開いて〜/ Library/Developer/Xcode/DerivedDataに移動し、次のように入力します。

rm -rfv *

その後、Xcodeを閉じて再度開き、Product-> Cleanに移動して、インデックス作成を待ちます。

1

OSXでは、CMD + Spaceは通常、Xcodeの自動入力ではなく、Finderを介してSpotlight Searchをプルアップします。代わりにESCを押すとどうなりますか? ESCは、Xcode内のデフォルトの自動入力キーです。私があなたのコードを使用して、自動入力オプションでESCを押した場合、最初に表示されるオプションはdefaultManagerです。

お役に立てば幸いです。

編集:

Xcode open PreferencesText Editingタブをクリックし、Escapeキーを使用して補完候補を表示するがオンになっていることを確認します。

EDIT 2016:この回答はXcode 4.xについて提供されたものです。反対票を投じる場合は、関連性がないことをコメントでお知らせください。削除します。ありがとう!

1
Dan

私の場合、グループ化に実際のフォルダを使用したため、オートコンプリートは機能しませんでした...満足していません。

Xcode 7.3(7D175)

1
Warpzit

同じターゲット/プロジェクトに複数の同じファイルが含まれていると、オートコンプリートが乱れることがあります(プロジェクトの重複ファイルを確認し、[プロジェクト]> [ビルドフェーズ]> [ソースをコンパイルして重複を排除]も確認してください

0
Maciek Czarnik

同じことが起こったばかりで、まったく新しいプロジェクトで、オートコンプリートが機能していませんでした... Xcodeは使用する10.10 SDKを選択し、展開ターゲットを10.11に設定しました。問題についての警告がツールバーに表示されていました。デプロイメントターゲットをコンパイラのデフォルトに設定すると、問題が修正されました。

0
teki

なぜこれが起こっているのかについて別の説明があります。私は最近、古いコードセットでこの問題が発生しました。多くの人が提案したようにDerivedDataを削除しようとしましたが、役に立ちませんでした。また、プロパティ名がグローバルに一意であることを確認しました。また、プロジェクトをクリーンアップしてXcodeを再起動しても効果がないことも確認しました。 Xcode 6とXcode 7の両方で試しました。

結局、私のXcodeプロジェクトにはiOS 6の互換性が必要であり、参照する必要のあるクラス@property変数を.mファイルで宣言できないという事実におそらく関連していることがわかりました。それらをヘッダーファイルに移動することで、問題は解決しました。

古いバージョンのiOS SDKでは、@property変数をヘッダーで宣言する必要がありましたが、私はそれらを.mファイルに入れて(新しいプロジェクトで)ヘッダーを整頓しました。したがって、Xcodeはオートコンプリートでそれらを認識することを拒否しましたが、正常にビルドされました。

これが誰かを助けることを願っています。それほど一般的ではないシナリオであることは知っています。

0
Hugh

私はプロジェクトの一部が作業中であることを発見しました。この問題の解決策は、私の新しいプロジェクトが8.1にあり、新しいバージョンのドキュメントをダウンロードしていないことでした。プロジェクトを8.0ビルドに戻したときに、完了が戻ってきました。設定とダウンロードに移動して、まだ取得していないダウンロードを確認してください.....それが更新の一部ではない理由がわかりません

0
Adam