Подтвердить что ты не робот

Автозаполнение в XCode не работает должным образом (от использования других IDE)

Прежде всего позвольте мне заявить, что я абсолютный новичок в отношении Objective-C и XCode, поскольку я работаю в фоновом режиме Flash Builder (IDE)/AS3. Я недавно начал изучать Objective-C и использовать XCode.

Сейчас я пишу свою первую программу и замечаю, что функция автозаполнения в XCode не работает, как я и ожидал. Он показывает мне все виды значений, которые, по-видимому, не связаны с типом класса, который я использую.

Если я заявляю:

NSFileManager *manager;

тогда, если я manager = [NSFileManager и manager = [NSFileManager здесь команду + пробел, я ожидаю, что defaultManager будет одним из предложений. И предложения должны быть только методами и свойствами класса NSFileManager. Так я привык к Flash Builder.

Это ошибка в XCode, какая-то неверная конфигурация или нет, поскольку XCode должен работать?

Autocomplete

4b9b3361

Ответ 1

Я обновил Xcode 4 до 5 в середине проекта и обнаружил, что любые новые файлы, созданные мной в подгруппах (приравниваются к вложенным папкам в проекте), не автозаполнялись, а новые файлы в верхней папке делали автозаполнение. Я исправил это, установив:

Build Settings ==> Search Paths ==> Always Search User Paths до Yes. Все файлы теперь автозаполняются.

Ответ 2

Как упоминалось здесь, есть много причин и решений.

Для меня это помогло: Перейдите в раздел "Настройки" > "Местоположение" > "Производные данные" > , щелкните стрелку, чтобы открыть в Finder. Удалить папку с именем "Производные данные" . И все работает снова.

Ответ 3

После обновления до новой версии XCode у меня была та же проблема. По какой-то причине у меня сработало то, что я выбрал " Настройки"> "Редактирование текста"> "Предложить завершение", набрав и отменив выбор, а затем выбрав его заново.

Надеюсь это поможет.

Ответ 4

Xcode отвечает на вопрос о том, что доступно как можно лучше.

Частично проблема заключается в том, что Objective-C "все решается во время выполнения" - компилятор предоставляет вам все возможные возможности, которые обычно значительно шире, чем вы ожидаете. Это не просто суперклассы (обычно вплоть до NSObject), а другие вещи в том же пространстве имен или, возможно, в том же пространстве имен. С Objective-C вещи не стоят на камне во время компиляции - как и во многих других языках, многое остается до времени выполнения, и компилятор не всегда может определить, что доступно - иногда это происходит просто верит, что ты действительно знаешь, что делаешь. Это означает, что вы можете получить широкий спектр опций.

Автозаполнение становится лучше с каждой новой версией Xcode - но все еще есть много возможностей для улучшения! Это сложно, однако, когда вы не можете вспомнить точное название метода, который вы хотите использовать (или даже первую букву) - в этих случаях я просто возвращаюсь к документации.

По сути, вам просто нужно продолжать печатать, пока это не сузит возможности. Это также может быть связано с синтаксическими ошибками в вашем коде - методы, следующие за ошибкой, внезапно становятся невидимыми для автозаполнения.

Если снова взглянуть на вашу проблему, кажется, что автозаполнение в вашей системе не работает, что выше обычного. Может быть, индексация XCode или что-то не так. Взгляните на некоторые старые ответы здесь и здесь для вдохновения, так как, возможно, вы страдаете от чего-то связанного. Вряд ли это может быть вызвано просто тем, что он пытается работать, поэтому что-то поврежденное или что-то в вашей конфигурации сбивает с толку.

Ответ 5

Прежде всего небольшой совет: вам никогда не придется импортировать Foundation и Cocoa в один и тот же файл. Cocoa является "мета-каркасом" (Apple называет это "зонтичной структурой" ), это означает, что он не является каркасом сам по себе, но вместо этого импорт Cocoa совпадает с импортом Foundation, AppKit и CoreData (это просто ярлык - импортируйте один, получите три).

Теперь о вашей проблеме: может быть, вы не добавили Cocoa или Foundation в свой проект Xcode? Xcode будет выполнять поиск только для завершения в файлах исходного кода и в рамках, на которые ссылается проект Xcode. Вы всегда можете импортировать заголовки любой фреймворк, компилятор найдет их (поскольку он всегда ищет фреймворки в каталоге System/Library/Frameworks выбранного SDK), но сам Xcode ищет только заголовки фреймворков, напрямую ссылающиеся на проект при выполнении завершение кода. Если у вас нет ссылки Foundation, Xcode не будет знать объявление объекта NSFileManager и, следовательно, также не имеет понятия, что NSFileManager фактически является объектом Obj-C или его методами. Когда вы добавляете фреймворк на этап компоновки процесса сборки, Xcode должен автоматически добавлять ссылку на проект для проекта. Вы действительно можете создать свой код приложения без ошибки компоновщика?

Ответ 6

В OSX CMD + Space обычно запускает поиск Spotlight через Finder, а не автоматически заполняет Xcode. Что происходит, когда вы пытаетесь вместо этого нажать ESC? ESC - ключ автозаполнения по умолчанию в XCode. Если я использую ваш код и нажимаю ESC для своих параметров автозаполнения, первый вариант, который я получаю, - defaultManager.

Надеюсь, это поможет!

РЕДАКТИРОВАТЬ:

В Xcode откройте " Настройки", нажмите на вкладку " Редактирование текста" и убедитесь, что флажок " Использовать клавишу Escape" показывает варианты завершения.

РЕДАКТИРОВАТЬ 2016: Обратите внимание, что этот ответ был предоставлен для около Xcode 4.x. Если вы хотите понизить его, пожалуйста, оставьте комментарий, что он больше не актуален, и я его удалю. Спасибо!

Ответ 7

В моем случае автозаполнение не работало, потому что я использовал реальные папки для группировки... Не понравилось, не понравилось.

Xcode 7.3 (7D175)

Ответ 8

Эта проблема может возникнуть, если ваш проект не проиндексирован должным образом.

Чтобы начать, убедитесь, что включено индексирование:

Приложения Утилиты → luanch Terminal и введите:

defaults write com.apple.dt.XCode IDEIndexDisable 0 

Затем перейдите в папку DerivedData для удаления файлов.

Откройте Finder и перейдите к ~/Library/Developer/Xcode/DerivedData​​strong > и введите:

rm -rfv *

После этого закройте и снова откройте Xcode, перейдите в Продукт → Очистить и дождитесь индексации..

Ответ 9

Я обнаружил, что часть проекта работает, и тяжелые работы заканчиваются. Я обнаружил, что решение этой проблемы состояло в том, что мои новые проекты были в 8.1, и я не загрузил документацию для новой версии. Когда я сменил проект на сборку 8.0, завершение завершилось. Перейдите в настройки и загрузки, чтобы увидеть загружаемые файлы, которые у вас отсутствуют. Не знаю, почему это не является частью обновления.

Ответ 10

Иногда автозаполнение происходит беспорядочно, когда у вас есть более одного файла, включенного в один и тот же целевой/проект ( просмотрите проект для дубликатов файлов, проверьте также Project > Build Phases > Compile Sources и устраните дубликаты. > )

Ответ 11

У меня есть другое объяснение того, почему это может происходить. У меня недавно была эта проблема со старым набором кода. Я попытался удалить DerivedData, как многие предлагали, но это не помогло. И я проверил, что имена свойств глобально уникальны. Я также убедился, что очистка проекта и перезапуск Xcode не помогли. Я попробовал это и на Xcode 6 и на Xcode 7.

В конце концов я выяснил, что это, вероятно, связано с тем, что мой проект Xcode требует совместимости с iOS 6, а переменные класса @property которые мне нужно сослаться, не могут быть объявлены в файле .m. Переместив их в заголовочный файл, проблема была решена.

В более старых версиях iOS SDK вам приходилось объявлять переменные @property в заголовке, но я привык помещать их в файл .m (в новых проектах), чтобы сохранить заголовок аккуратным. Следовательно, XCode отказался распознавать их с автозаполнением, но он будет успешно построен.

Надеюсь, это кому-нибудь поможет. Я знаю, это менее распространенный сценарий.

Ответ 12

То же самое произошло, новый проект, автозаполнение не работало... Xcode выбрал 10.10 SDK для использования, а затем установил цель развертывания в 10.11. Он даже показал предупреждение на панели инструментов о проблеме. Установка цели развертывания для компилятора по умолчанию задала проблему.