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 и т. Д.)

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

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

Другие вопросы по тегам