Objective-C#import Confusion

Mik*_*e D 4 objective-c

#import对Objective-C中的陈述仍然有点困惑.我有一个头文件(Common.h),其中我持有一些在整个应用程序中使用的常量NSStrings.到目前为止,我已经使用#import "Common.h" 了2个类,我得到了一个构建错误:

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
Run Code Online (Sandbox Code Playgroud)

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";
Run Code Online (Sandbox Code Playgroud)

我受到了印象(来自这篇文章),#import防止头文件被包含两次.我在这里错过了什么?

Mik*_*Hay 6

在标题(.h)文件中,您应该只声明常量,然后应该定义常量并在实现(.m)文件中指定一个值.

在Common.h中

extern NSString *const EX_XML_URL;
Run Code Online (Sandbox Code Playgroud)

在Common.m

NSString *const EX_XML_URL = @"http://myurl.com/xmldata";
Run Code Online (Sandbox Code Playgroud)


如果您在Common.m中唯一拥有的是常量定义,那就没关系了,如果这就是事情的解决方法.只需确保Common.m包含在编译并链接到目标的文件中.