Почему автозаполнение не работает во вновь создаваемом файле заголовка протокола в xcode?

Я просто создаю файл заголовка протокола, выполнив:

Файл → Новый → Файл → (Cocoa Touch) Objective-C Протокол → Далее → имя входного протокола → Далее → выберите мою цель → Создать

когда я пытаюсь создать список методов в файле заголовка протокола. Я заметил, что Dynamic Typing не работает. Когда я набираю "NSStr" в других файлах, обычно автоматически открывается список классов, и все классы помечены цветами. почему он не работает в файле заголовка протокола?

BTW, я попытался поместить код протокола в существующий файл класса, который работает. почему он не работает в разделенном файле?

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

Мой протокол выглядит так:

#import <Foundation/Foundation.h>

@protocol PanToSwitchViewDelegateProtocol <NSObject>

@end

Ответ 1

Я просто экспериментировал, и я вижу точно то же самое. Я думаю, проблема заключается в том, что компилятор не будет сканировать файл, если он не импортируется в сканируемый файл.

Если вы импортируете заголовок протокола в файл .m и скомпилируете его для удачи, вы должны начать загрузку автозаполнения на NSString.

ИЗМЕНИТЬ

Из комментариев по моему ответу и в других местах видно, что jazou2012 находится под недоразумением.

Автозаполнение не имеет права говорить о правильности модуля или нет. Автозаполнение может не найти идентификатор по нескольким причинам, даже если этот идентификатор был правильно определен. Например, я смог реплицировать проблему Jazou с помощью NSString в протоколе, хотя был импортирован Foundation.h.

Однако, как только я импортировал заголовок протокола в файл .m, автозаполнение начало распознавать NSString. Я предполагаю, что автозаполнение запускает только индексирование файлов, если они видны компилятору.

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

Ответ 2

Импорт в заголовок класса или файл реализации или в другое место, где он будет виден, например, другой заголовок импорта или предварительно скомпилированный заголовок. Протоколы в Foundation видны всегда, потому что они импортируются с помощью Foundation. Cocoa включает Foundation, поэтому классы просмотра будут включать протоколы Cocoa. Core Animation и WebKit по умолчанию не включены, поэтому вам нужно импортировать их, чтобы увидеть любые протоколы, которые они включают.