ios - Проблемы с анализом в NSObjCRuntime, NSZone и NSObject
Я использую AddThis, чтобы добавить параметры обмена в моем приложении iOS.
Я импортировал классы и добавил флаг -fno-objc-arc ко всем импортированным классам, поскольку они не используют ARC.
Тем не менее, когда я пытаюсь запустить приложение, я получаю множество таких проблем, как:
Expected identifier or '('
Unknown type name 'NSString'
Unknown type name 'Protocol'
...
Эти ошибки возникают в NSObjCRuntime, NSZone и NSObject. У меня есть необходимые рамки также включены. Есть идеи?
Включая это изображение, если оно помогает:
6 ответов
Я просто изменил имя файла Base64Transcoder.c на Base64Transcoder.m, и теперь проект компилируется. Я понятия не имею, почему это решает проблему, но это работает.
У меня была такая же проблема в моем проекте, когда я пытался смешать код C (.h и.c) с кодом Objective-C. Нашли причину проблемы:
Проверьте ваш файл.pch, чтобы убедиться, что каждая среда Objective-C#import (например, #import <UIKit/UIKit.h>
) заключен в:
#ifdef __OBJC__
#endif
Если они находятся за пределами этой условной области, компилятор попытается импортировать платформы Objective-C в исходный код C.
Надеюсь, это поможет.
У меня была та же проблема, с использованием кода C и C++ с целью C, и у меня нет.pch. Самое простое решение - перейти в настройки сборки -> Флаги настраиваемого компилятора и установить "Other C Flags" в "-x target". -c "и установить" Другие флаги C++ "в -x target-C++"
это сделает свое дело с xCode 7.2
У меня была такая же проблема, когда мой проект содержал файлы.cpp.
Если файл.cpp не содержит каркасов ObjectiveC (например), он должен иметь тип "Default-C++ Source"
,
но если файл.cpp имеет каркасы ObjectiveC - он должен быть как 'Objective-C++ Source'
TLDR: если с вашим файлом PCH все в порядке, просмотрите заголовки файлов CPP, чтобы убедиться, что вы случайно не включили какие-либо заголовки для объектов Objective C.
Детали: Я получил это, потому что я случайно включил заголовок класса Objective C в заголовок класса C++, косвенно. Структура была такая:
Compass.h определил чистый класс Objective C.
ActionTracker.h определил класс C++, который понимал конструкции Objective C (через ActionTracker.mm).
HelloWorld.h определил чисто класс C++.
В моей первоначальной настройке HelloWorld.h включал ActionTracker.h, но это было нормально, так как ActionTracker.h еще не содержал Compass.h. Позже я изменил свой код и включил Compass.h в ActionTracker.h, который затем перетащил его в HelloWorld.h, и я получил эти ошибки.
У меня была такая же проблема, когда я пытался переместить файл info.plist из одного каталога в другой. Это каким-то образом вызвало XCode для редактирования фаз сборки для этой цели и значительно увеличило количество "источников компиляции" и "ресурсов комплекта копирования".
К счастью, у моего проекта есть несколько целей, которые я использую для тестирования (например, демо-версия приложения, App Dev, App Local, App 1.1, App 1.2 и т. Д.)
Поэтому я просто продублировал одну из незатронутых целей и переименовал ее (также переименовал в идентификатор пакета и схему сборки), и это, очевидно, устранило проблему для меня, поскольку затронул не весь проект, а только эту конкретную цель.
Если вы хотите попробовать мое решение, попробуйте создать новую цель с нуля, или продублируйте и переименуйте любую из ваших незатронутых целей.