web-dev-qa-db-ger.com

ios - Parse-Probleme in NSObjCRuntime, NSZone und NSObject

Ich benutze AddThis , um Freigabeoptionen in meiner iOS-App hinzuzufügen.

Ich habe die Klassen importiert und allen importierten Klassen das Flag -fno-objc-arc hinzugefügt, da sie ARC nicht verwenden.

Wenn ich jedoch versuche, die App auszuführen, bekomme ich eine Reihe von Parse-Problemen wie:

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

Diese Fehler treten in NSObjCRuntime, NSZone und NSObject auf. Ich habe auch die erforderlichen Rahmenbedingungen. Irgendwelche Ideen?

Einschließlich dieses Bildes, wenn es hilft: image

38
soleil

Ich habe gerade den Dateinamen von Base64Transcoder.c in Base64Transcoder.m geändert, und jetzt kompiliert das Projekt. Ich habe keine Ahnung, warum das Problem dadurch behoben wird, aber es funktioniert.

21
soleil

Ich hatte das gleiche Problem in meinem Projekt, als ich versuchte, C-Code (.h und .c) mit Objective-C-Code zu mischen. Den Grund des Problems gefunden:

Überprüfen Sie Ihre .pch-Datei, um sicherzustellen, dass jeder #import des Objective-C-Frameworks (wie #import <UIKit/UIKit.h>) eingeschlossen ist:

#ifdef __OBJC__

#endif

Wenn sie sich außerhalb dieses bedingten Bereichs befinden, versucht der Compiler, Objective-C-Frameworks in C-Quellcode zu importieren.

Hoffentlich hilft das.

126
horacex

Ich hatte das gleiche Problem, als mein Projekt .cpp-Dateien enthielt.

Wenn die .cpp-Datei keine ObjectiveC-Frameworks (z. B.) enthält, muss sie vom Typ "Default-C++ Source" sein

enter image description here

wenn die .cpp-Datei über ObjectiveC-Frameworks verfügt, muss diese als 'Objective-C++ - Quelle' angegeben werden.

enter image description here

16
gaRik

Ich hatte das gleiche Problem, C- und C++ - Code mit Objective C, und ich habe kein .pch Die einfachste Lösung bestand darin, in Ihre Build-Einstellungen zu gehen -> Custom Compiler Flags und "Other C Flags" auf " -x Objektiv-c "und setzen Sie" Andere C++ - Flags "auf" -x Objektiv-C++ ".

dies wird den Trick mit xCode 7.2 tun

16
Bastien

TLDR: Wenn Ihre PCH-Datei in Ordnung ist, schauen Sie in den CPP-Dateiheatern nach, ob Sie versehentlich Kopfzeilen für Objective C-Objekte eingefügt haben.

Die Details: Ich habe dies erhalten, weil ich versehentlich einen Objective-C-Klassenheader indirekt in einen C++ - Klassenheader eingefügt hatte. Die Struktur war diese:

Compass.h definierte eine reine Objective-C-Klasse.

ActionTracker.h definierte eine C++ - Klasse, die Objective C-Konstrukte (über ActionTracker.mm) verstand.

HelloWorld.h definierte eine reine C++ - Klasse.

In meinem ursprünglichen Setup enthielt HelloWorld.h ActionTracker.h, dies war jedoch in Ordnung, da ActionTracker.h Compass.h noch nicht enthielt. Später habe ich meinen Code geändert und Compass.h in ActionTracker.h eingefügt, das dann in HelloWorld.h abgerufen wurde und diese Fehler wurden angezeigt.

3
user1469569

Ich hatte das gleiche Problem, als ich versuchte, die info.plist -Datei von einem Verzeichnis in ein anderes zu verschieben .. Dies löste irgendwie XCode aus, um die Erstellungsphasen für dieses Ziel zu bearbeiten, und die Anzahl der "Compile Sources" und "Copy Bundle" wurde erheblich erhöht Ressourcen".

Glücklicherweise hat mein Projekt mehrere Ziele, die ich zum Testen verwende (z. B. App Demo, App Dev, App Local, App 1.1, App 1.2 usw.).

Also habe ich einfach eines der nicht betroffenen Ziele dupliziert und umbenannt (auch die Bundle-ID und das Build-Schema). Dies hat das Problem offensichtlich für mich gelöst, da nicht das gesamte Projekt betroffen war, sondern nur dieses spezifische Ziel.

Wenn Sie meine Lösung ausprobieren möchten, versuchen Sie, ein neues Ziel von Grund auf neu zu erstellen, oder kopieren Sie eines Ihrer nicht betroffenen Ziele und benennen Sie sie um.

0
Matthys Du Toit