最初に、私はFlash Builder(IDE)/ AS3のバックグラウンドを使用しているため、私がObjective-CとXcodeの完全な初心者であることを述べさせてください。私は最近、Objective-Cの学習とXcodeの使用を開始しました。
現在、最初のプログラムを作成していますが、Xcodeのオートコンプリート機能が期待どおりに機能していないことに気づきました。私が使用しているクラスのタイプとは一見無関係のすべての種類の値を示しています。
私が宣言した場合:
NSFileManager *manager;
次に、manager = [NSFileManager
と入力して、ここでcommand + spaceと入力します。defaultManager
が提案の1つであると思います。また、提案はNSFileManager
クラスのメソッドとプロパティのみにする必要があります。これは、私がFlash Builderで使用する方法でした。
これはXcodeのバグなのか、設定の誤りなのか、それともXcodeが機能するはずなのか?
プロジェクトの途中でXcode 4を5にアップグレードし、サブグループ(プロジェクトのサブフォルダーに相当)で作成した新しいファイルがオートコンプリートされず、最上位フォルダーの新しいファイルがオートコンプリートされました。私はこれを次の設定で修正しました:
Build Settings ==> Search Paths ==> Always Search User Paths
からYes
へ。すべてのファイルがオートコンプリートされます。
前述のように here には多くの理由と解決策があります。
私はこの解決策を手伝いました:[設定]> [場所]> [派生データ]に移動します>矢印をクリックしてFinderで開きます。 「Derived Data」という名前のフォルダを削除します。そして、すべてが再び機能します。
新しいXcodeバージョンにアップグレードした後、同じ問題が発生しました。何らかの理由で、私にとってうまくいったのはPreferences> Text Editing> Suggest Completions while打ちとde-selectingそれからre-selectingそれ。
お役に立てれば。
Xcodeは、可能な限り最善のものが利用できるかという質問に答えています。
問題の一部は、Objective-Cの「実行時に決定されるもの」という性質にあります。コンパイラーは、可能性のあるすべての可能性を提供します。これは通常、予想よりもかなり広い範囲です。これは単にスーパークラス(通常はNSObjectに至るまで)ではなく、同じ名前空間内、またはおそらく同じ名前空間内のものです。 Objective-Cでは、コンパイル時に物事が確定するわけではありません。他の多くの言語と同様に、実行時まで多くが残され、コンパイラーは常に何が利用可能かを判断できない場合があります。あなたが本当にあなたが何をしているかを本当に知っていると信じているだけです。つまり、さまざまなオプションが提示されることになります。
オートコンプリートは、Xcodeの新しいバージョンごとに改善されますが、まだ改善の余地がたくさんあります!ただし、使用するメソッドの正確な名前(または最初の文字も)を思い出せない場合は注意が必要です。これらの場合、ドキュメントに戻ります。
基本的に、可能性を絞り込むまで入力を続けるだけです。また、コード内の構文エラーでトリップする可能性もあります。エラーに続くメソッドは、突然オートコンプリートから見えなくなります。
あなたの問題をもう一度見ると、システムではオートコンプリートがかなり壊れているように見えます-それは通常を超えています。 Xcodeのインデックス作成などが混乱している可能性があります。関連する何かに苦しんでいる可能性があるので、インスピレーションを得るためにいくつかの古い答え here と here を見てください。それが機能しようとしているため、単に設定によって引き起こされる可能性は低いので、何かが破損しているか、構成内の何かが混乱している問題です。
まず、ちょっとしたヒント:Foundation
とCocoa
を同じファイルにインポートする必要はありません。 Cocoa
は「メタフレームワーク」(Appleは「傘フレームワーク」と呼んでいます)です。つまり、それ自体はフレームワークではなく、代わりにCocoa
をインポートすることはFoundation
、AppKit
、およびCoreData
(これは単なるショートカットです。1つインポートすると、3つ取得されます)。
今あなたの問題に関して:Cocoa
またはFoundation
をXcodeプロジェクトに追加していない可能性がありますか? Xcodeは、ソースコードファイルおよびXcodeプロジェクトによって参照されるフレームワーク内の補完のみを検索します。フレームワークのヘッダーはいつでもインポートできます。コンパイラーはそれらを見つけます(常に、選択したSDKのSystem/Library/Frameworks
ディレクトリでフレームワークを検索するため)。ただし、Xcode自体は、プロジェクトによって直接参照されるフレームワークのヘッダーのみを検索しますコード補完を実行するとき。 Foundation
が参照されていない場合、XcodeはNSFileManager
のオブジェクト宣言を認識しないため、NSFileManager
が実際にObj-Cオブジェクトであるか、またはそれが持っているメソッド。ビルドプロセスのリンクフェーズにフレームワークを追加すると、Xcodeはプロジェクトにフレームワーク参照を自動的に追加します。リンカーエラーなしで実際にアプリのコードを作成できますか?
この問題は、プロジェクトが適切にインデックス化されていない場合に発生する可能性があります。
まず、インデックス作成が有効になっていることを確認します。
アプリケーション-> ユーティリティ->ランチターミナルとタイプ:
defaults write com.Apple.dt.XCode IDEIndexDisable 0
次に、DerivedDataフォルダーに移動してファイルを削除します。
Finderを開いて〜/ Library/Developer/Xcode/DerivedDataに移動し、次のように入力します。
rm -rfv *
その後、Xcodeを閉じて再度開き、Product-> Cleanに移動して、インデックス作成を待ちます。
OSXでは、CMD + Spaceは通常、Xcodeの自動入力ではなく、Finderを介してSpotlight Searchをプルアップします。代わりにESCを押すとどうなりますか? ESCは、Xcode内のデフォルトの自動入力キーです。私があなたのコードを使用して、自動入力オプションでESCを押した場合、最初に表示されるオプションはdefaultManager
です。
お役に立てば幸いです。
編集:
Xcode open PreferencesでText Editingタブをクリックし、Escapeキーを使用して補完候補を表示するがオンになっていることを確認します。
EDIT 2016:この回答はXcode 4.xについて提供されたものです。反対票を投じる場合は、関連性がないことをコメントでお知らせください。削除します。ありがとう!
私の場合、グループ化に実際のフォルダを使用したため、オートコンプリートは機能しませんでした...満足していません。
Xcode 7.3(7D175)
同じターゲット/プロジェクトに複数の同じファイルが含まれていると、オートコンプリートが乱れることがあります(プロジェクトの重複ファイルを確認し、[プロジェクト]> [ビルドフェーズ]> [ソースをコンパイルして重複を排除]も確認してください)
同じことが起こったばかりで、まったく新しいプロジェクトで、オートコンプリートが機能していませんでした... Xcodeは使用する10.10 SDKを選択し、展開ターゲットを10.11に設定しました。問題についての警告がツールバーに表示されていました。デプロイメントターゲットをコンパイラのデフォルトに設定すると、問題が修正されました。
なぜこれが起こっているのかについて別の説明があります。私は最近、古いコードセットでこの問題が発生しました。多くの人が提案したようにDerivedDataを削除しようとしましたが、役に立ちませんでした。また、プロパティ名がグローバルに一意であることを確認しました。また、プロジェクトをクリーンアップしてXcodeを再起動しても効果がないことも確認しました。 Xcode 6とXcode 7の両方で試しました。
結局、私のXcodeプロジェクトにはiOS 6の互換性が必要であり、参照する必要のあるクラス@property
変数を.mファイルで宣言できないという事実におそらく関連していることがわかりました。それらをヘッダーファイルに移動することで、問題は解決しました。
古いバージョンのiOS SDKでは、@property
変数をヘッダーで宣言する必要がありましたが、私はそれらを.m
ファイルに入れて(新しいプロジェクトで)ヘッダーを整頓しました。したがって、Xcodeはオートコンプリートでそれらを認識することを拒否しましたが、正常にビルドされました。
これが誰かを助けることを願っています。それほど一般的ではないシナリオであることは知っています。
私はプロジェクトの一部が作業中であることを発見しました。この問題の解決策は、私の新しいプロジェクトが8.1にあり、新しいバージョンのドキュメントをダウンロードしていないことでした。プロジェクトを8.0ビルドに戻したときに、完了が戻ってきました。設定とダウンロードに移動して、まだ取得していないダウンロードを確認してください.....それが更新の一部ではない理由がわかりません