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

Ios - Проблемы с парсером в NSObjCRuntime, NSZone и NSObject

Я использую AddThis, чтобы добавить параметры совместного доступа в моем приложении iOS.

Я импортировал классы и добавил флаг -fno-objc-arc во все импортированные классы, так как они не используют ARC.

Однако, когда я пытаюсь запустить приложение, я получаю множество проблем с Parse, таких как:

Expected identifier or '('
Unknown type name 'NSString'
Unknown type name 'Protocol'
...

Эти ошибки возникают в NSObjCRuntime, NSZone и NSObject. У меня также есть необходимые рамки. Любые идеи?

Включая это изображение, если это помогает: image

4b9b3361

Ответ 1

Я просто изменил имя файла Base64Transcoder.c на Base64Transcoder.m, и теперь проект компилируется. Я не знаю, почему это устраняет проблему, но она работает.

Ответ 2

У меня была такая же проблема в моем проекте, когда я пытался смешивать код C (.h и .c) с кодом Objective-C. Нашел причину проблемы:

Проверьте ваш .pch файл, чтобы убедиться, что каждая инфраструктура Objective-C #import (например, #import <UIKit/UIKit.h>) заключена в:

#ifdef __OBJC__

#endif

Если они находятся за пределами этой условной области, компилятор попытается импортировать фреймворки Objective-C в исходный код C.

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

Ответ 3

У меня была такая же проблема, когда в моем проекте содержались файлы .cpp.

Если .cpp файл не содержит фреймворков ObjectiveC (например, он имеет тип "Default-С++ Source"

enter image description here,

но если .cpp файл имеет инфраструктуру ObjectiveC - он должен быть как 'Objective-C ++ Source'

enter image description here

Ответ 4

У меня была такая же проблема, используя код C и С++ с объективом C, и у меня нет .pch Самым простым решением было войти в ваши настройки сборки → Пользовательские флаги компилятора и установить "Другие флаги C" на "-x objective-c" и установить "Другие флаги С++" на "-x objective-c ++"

это сделает трюк с xCode 7.2

Ответ 5

TL;DR: если ваш файл PCH в порядке, просмотрите заголовки файлов CPP, чтобы узнать, случайно ли вы включили какие-либо заголовки для объектов Objective C.

Детали: Я получил это, потому что случайно включил заголовок класса Objective-C в заголовок класса С++ косвенно. Структура была следующей:

Compass.h определил чистый класс Objective C.

ActionTracker.h определил класс С++, который понимал конструкции Objective C (через ActionTracker.mm).

HelloWorld.h определил чисто класс С++.

В моей первоначальной настройке HelloWorld.h включил ActionTracker.h, но это было нормально, поскольку ActionTracker.h еще не содержал Compass.h. Позже я изменил свой код и включил Compass.h в ActionTracker.h, который затем потянул его в HelloWorld.h, и я получил эти ошибки.

Ответ 6

У меня была такая же проблема, когда я пытался переместить файл info.plist из одного каталога в другой. Это как-то вызвало XCode для редактирования фаз сборки для этой цели и значительно увеличило количество "Источники компиляции" и "Копировать ресурсы Bundle".

К счастью, мой проект имеет несколько целей, которые я использую для тестирования (например, App Demo, App Dev, App Local, App 1.1, App 1.2 и т.д.)

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

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