I am still a bit confused about the #import
statement in Objective-C. I have a header file (Common.h) where I holding some constant NSStrings that are used throughout the application. So far I have used #import "Common.h"
in 2 classes, and I get a build error:
duplicate symbol _EX_XML_URL in /Users/username/Library/Developer/Xcode/DerivedData/projectname-ffvcivanbwwtrudifbcjntmoopbo/Build/Intermediates/projectname.build/Debug-iphonesimulator/projectname.build/Objects-normal/i386/NewsView.o and /Users/username/Library/Developer/Xcode/DerivedData/projectname-ffvcivanbwwtrudifbcjntmoopbo/Build/Intermediates/projectname.build/Debug-iphonesimulator/projectname.build/Objects-normal/i386/ViewController.o for architecture i386
EX_XML_URL is declared like:
//
// Common.h
// Group of common constants used through out the application
/*
* Constant strings available to application
*/
#import <Foundation/NSString.h>
NSString* EX_XML_URL = @"http://myurl.com/xmldata"; // URL for XML data
NSString* EX_NO_CONNECTION = @"Network not availble";
NSString* EX_DEFAULT_IMAGE = @"logo.png";
I was under the impression (from this post) that #import
guards against header files being included twice. What part am I missing here?
In your header (.h) file, you should only declare the constant, and then you should define the constant and assign a value in your implementation (.m) file.
in Common.h
extern NSString *const EX_XML_URL;
in Common.m
NSString *const EX_XML_URL = @"http://myurl.com/xmldata";
It's ok if the only thing you have in Common.m is constant definitions, if that's the way things work out. Just make sure Common.m is included in the files that are compiled and linked into your target.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With