web-dev-qa-db-fra.com

ios - Analyse des problèmes dans NSObjCRuntime, NSZone et NSObject

J'utilise AddThis pour ajouter des options de partage dans mon application iOS.

J'ai importé les classes et ajouté l'indicateur -fno-objc-arc à toutes les classes importées, car elles n'utilisent pas ARC.

Cependant, lorsque j'essaie d'exécuter l'application, je rencontre une multitude de problèmes d'analyse tels que:

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

Ces erreurs se produisent dans NSObjCRuntime, NSZone et NSObject. J'ai les cadres requis inclus aussi. Des idées?

Y compris cette image si cela peut aider: image

38
soleil

Je viens de changer le nom de fichier de Base64Transcoder.c en Base64Transcoder.m, et maintenant le projet est compilé. Je ne sais pas pourquoi cela résout le problème, mais cela fonctionne.

21
soleil

J'avais le même problème avec mon projet lorsque j'essayais de mélanger du code C (.h et .c) avec du code Objective-C. Trouvé la raison du problème:

Vérifiez votre fichier .pch pour vous assurer que chaque framework Objective-C #import (tel que #import <UIKit/UIKit.h>) est inclus dans:

#ifdef __OBJC__

#endif

S'ils sortent de cette étendue conditionnelle, le compilateur essaiera d'importer les frameworks Objective-C dans le code source C.

J'espère que cela pourra aider.

126
horacex

J'ai eu le même problème lorsque mon projet contenait des fichiers .cpp.

Si le fichier .cpp ne contient pas de framework ObjectiveC (par exemple), il doit être de type 'Source par défaut-C++'

enter image description here

mais si le fichier .cpp a des frameworks ObjectiveC - ce doit être en tant que 'Source Objective-C++'

enter image description here

16
gaRik

J'ai eu le même problème, en utilisant le code C et C++ avec Objective C, et je n'ai pas de .pch La solution la plus simple était d'aller dans vos paramètres de construction -> Personnaliser les drapeaux du compilateur et définir les "Autres drapeaux C" sur " -x objectif-c "et définissez les" Autres drapeaux C++ "sur" -x objectif-c ++ "

cela fera l'affaire avec xCode 7.2

16
Bastien

TLDR: si votre fichier PCH est OK, parcourez les en-têtes de votre fichier CPP pour voir si vous avez accidentellement inclus des en-têtes pour les objets Objective C.

Les détails: J'ai eu cela parce que j'avais accidentellement inclus un en-tête de classe Objective-C dans un en-tête de classe C++, indirectement. La structure était la suivante:

Compass.h a défini une classe Objective C pure.

ActionTracker.h a défini une classe C++ comprenant les constructions Objective C (via ActionTracker.mm).

HelloWorld.h a défini une classe purement C++.

Dans ma configuration d'origine, HelloWorld.h incluait ActionTracker.h, mais c'était correct, car ActionTracker.h ne contenait pas encore Compass.h. Plus tard, j'ai changé mon code et inclus Compass.h dans ActionTracker.h, qui l'a ensuite inséré dans HelloWorld.h et j'ai eu ces erreurs.

3
user1469569

J'ai eu le même problème lorsque j'ai essayé de déplacer le fichier info.plist d'un répertoire à un autre .Ceci a en quelque sorte amené XCode à modifier les phases de construction de cette cible et a considérablement augmenté la quantité de «sources de compilation» et de «Copier le paquet Ressources".

Heureusement, mon projet a plusieurs cibles que j'utilise pour les tests (démo, démo, application, application locale, application 1.1, application 1.2, etc.).

Je viens donc de dupliquer une des cibles non affectées et de la renommer (ainsi que l'identificateur de bundle et le schéma de construction), ce qui a évidemment corrigé le problème pour moi puisque ce n'est pas l'ensemble du projet qui a été affecté, mais uniquement cette cible spécifique.

Si vous voulez essayer ma solution, essayez de créer une nouvelle cible à partir de rien, ou dupliquez et renommez l'une de vos cibles non affectées.

0
Matthys Du Toit