Ich habe einen NSString definiert, der als Fehlerdomäne in NSError verwendet werden soll, und habe kopiert, wie sich ASIHttpRequest dort verhält.
NSString* const FPServerAPIErrorDomain = @"FPServerAPIErrorDomain";
Ich habe die Konstante in eine eigene .h-Datei // FPServerAPICoordinatorConstants.h gesteckt
#ifndef FirePlayer_FPServerAPICoordinatorConstants_h
#define FirePlayer_FPServerAPICoordinatorConstants_h
NSString* const FPServerAPIErrorDomain = @"FPServerAPIErrorDomain";
#endif
aber wenn ich es in mehr als einem .m
SomeFile.m
#import "FPServerAPICoordinatorConstants.h"
SomeOtherFile.m
#import "FPServerAPICoordinatorConstants.h"
Ich habe einen Linker-Fehler ‘doppeltes Symbol’
ld: duplicate symbol _FPServerAPIErrorDomain in SomeFile.o and ....SomeOtherFile.o for architecture armv7
Also ändere ich die Konstante in #define und es hat gut funktioniert.
// FPServerAPICoordinatorConstants.h
#ifndef FirePlayer_FPServerAPICoordinatorConstants_h
#define FirePlayer_FPServerAPICoordinatorConstants_h
//THIS WAS TRIGGERING link errors
//NSString* const FPServerAPIErrorDomain = @"FPServerAPIErrorDomain";
//working OK
#define FPServerAPIErrorDomain @"FPServerAPIErrorDomain"
#endif
Aber gibt es eine Möglichkeit, die Konstante im globalen Raum dazu zu bringen, kein “doppeltes Symbol” zu werfen?
Wenn Sie die Include-Datei Magic weglassen, ist Ihre Frage dieselbe wie: “Kann ich tun const int i=42; zweimal in der gleichen Quelle/Binärdatei?
– Jörg Beyer
6. März 2012 um 12:18 Uhr
ja, aber auch ‘wie benutzt man #defines NICHT und benutzt const im globalen Raum’? ist es möglich? ist es bevorzugt? #define funktioniert, aber warum gibt es dann consts? Ich bin eine Java-Person, die zu Obj-c gezogen ist. Ich habe mich noch nicht in Voodoo 101 qualifiziert
– brian.klar
6. März 2012 um 12:23 Uhr
Sie haben überhaupt nicht kopiert, was ASIHttpRequest tut. Gehen Sie zurück und schauen Sie noch einmal.
– Hooleyhoop
6. März 2012 um 12:38 Uhr