我仍然对Objective-C中的#import
语句感到困惑。我有一个头文件(Common.h),其中我持有一些在整个应用程序中使用的常量NSStrings。到目前为止,我在2个类中使用了#import "Common.h"
,并且出现了构建错误:
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声明为:
//
// 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";
我的印象是from this post,#import
防止头文件被包含两次。我在这里错过了哪一部分?
答案 0 :(得分:6)
在标题(.h)文件中,你应该只声明常量,然后你应该定义常量并在你的实现中分配一个值(.m )文件。
在Common.h中
extern NSString *const EX_XML_URL;
在Common.m中
NSString *const EX_XML_URL = @"http://myurl.com/xmldata";
如果您在Common.m中唯一拥有的是常量定义,那就没关系了,如果这就是事情的解决方法。只需确保Common.m包含在编译并链接到目标文件中。
答案 1 :(得分:4)
您需要将字符串拆分为2个文件,一个在头文件中声明它们extern,另一个实际包含文字:
·H
extern NSString * const EX_XML_URL;
的.m
NSString * const EX_XML_URL = @"http://myurl.com/xmldata";