#objective-c #ios #xcode
#objective-c #iOS #xcode
Вопрос:
Я не могу избавиться от двух ошибок в моем модуле класса, даже когда я упростил код до минимального выражения:
#import <Foundation/Foundation.h>
@interface MyClass : NSObject
@end
Обе ошибки сообщаются в строке @interface, и они:
— отсутствует @end
— ожидаемый идентификатор или «{»
Комментарии:
1. Похоже
NSObject
, что не определено2. Вы в конечном итоге решили эту проблему? Я вижу это сейчас. Очистка, удаление производных данных … ничего не помогает!
3. компилятор может указать вам на совершенно неправильный файл. пройдите через все. файлы h и .m в вашем проекте и проверьте соответствие ‘@interface’ / ‘@end’, ‘@implementation’ /’@end’ и так далее. это происходит также, если вы по ошибке импортируете файл .m вместо .h (это случается)
4. WTF? Я все еще не могу решить эту проблему и схожу с ума, таких ошибок не должно быть в готовом продукте.
5. Я забыл добавить @end в один из моих заголовочных файлов (файл .h).
Ответ №1:
Проверьте файлы заголовков, которые #импортированы на той же странице, и убедитесь, что заголовки имеют соответствующие операторы @interface / @end .
У меня была та же проблема, и XCode сообщил, что в @implementation моего файла .m отсутствует оператор @end, даже когда я сократил его до простого:
#import "MasterViewController.h"
#import "MyBadHeaderFile.h"
@implementation MasterViewController
@end
На самом деле ошибка заключалась в отсутствии @end в #imported MyBadHeaderFile .файл h.
Комментарии:
1. Думал, что схожу с ума, это была именно моя проблема. 1
2. точно так же и моя проблема, за исключением того, что ошибка попала в совершенно не связанный файл, который не был изменен и имел нулевой импорт, отличный от UIKit. благодаря git я смог просто просмотреть файлы, которые были изменены, и сузить их до того места, где они отсутствовали…
3. Я забыл добавить @end в один из моих заголовочных файлов (файл .h).
Ответ №2:
У меня была аналогичная проблема, добавление a }
в мой код избавило меня от ошибок.
Перед добавлением }
я получал следующие ошибки:
- непредвиденное
@
в программе (проблема с синтаксическим анализом) - Ожидается
}
(проблема с синтаксическим анализом) @end
отсутствует в контексте реализации (семантическая проблема)
Ответ №3:
комментарий рокьярка должен быть правильным ответом:
1) компилятор может указать вам на совершенно неправильный файл. пройдите через все.файлы h и .m в вашем проекте и проверьте соответствие ‘@interface’ / ‘@end’, ‘@implementation’ /’@end’ и так далее.
2) это происходит также, если вы по ошибке импортируете файл .m вместо .h
Ответ №4:
Не имеет значения, в каком файле появляется ошибка. Обязательно проверьте все файлы, которые вы недавно изменили. Похоже, я скопировал файл из тестового проекта в свой реальный проект и забыл @end в одном из файлов. Это дало мне ошибку в совершенно не связанном файле .h.
Ответ №5:
Попробуйте удалить файл реализации этого класса из «Скомпилировать исходные коды в настройках проекта»
Ответ №6:
@interface MyClass : NSObject{
}
@end
Комментарии:
1. Фигурные скобки на самом деле не нужны.
Ответ №7:
Я столкнулся с аналогичной проблемой, код был в порядке, но он выдавал эту ошибку.
В конце концов я решил это, очистив проект, вы пробовали это?
Ответ №8:
PEBKAC Отсутствие специфичности в строках статического анализатора
Существующие ответы, безусловно, полезны. Я просто хочу добавить общий PEBKAC, который вызывает это; а также подчеркнуть, что CLANG здесь должен быть понятнее. Кто-то со знанием предметной области должен подать патч, чтобы сделать сообщение об ошибке более понятным. n@endn
Часть сообщения нелепа, несмотря ни на что.
(Отображение разрывов строк как n в сообщении, предназначенном для помощи пользователям графического интерфейса? Действительно ЛЯЗГ?)
Причина
Когда вы только что создали новый класс, файлы @interface
amp; @implementation
выглядят очень похожими, и Xcode автоматически поместит ваш курсор в реализацию.
Если вы бездумно начнете вводить свой интерфейс (объявления сигнатур ваших методов) в файле реализации, вы получите это предупреждение, потому что анализатор видит методы без открывающих и закрывающих фигурных скобок.
Наглядный пример, показанный сразу
Ответ №9:
У меня была такая же ошибка, и это было потому, что у меня
@interface MyViewController ()
объявлено два раза в MyViewController.m