Objective-C # импорт путаница - PullRequest
       0

Objective-C # импорт путаница

4 голосов
/ 07 сентября 2011

Я все еще немного озадачен заявлением #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

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";

Я был под впечатлением ( из этого поста ), который #import защищает от включения заголовочных файлов дважды.Какую часть мне здесь не хватает?

Ответы [ 2 ]

6 голосов
/ 07 сентября 2011

В вашем файле заголовка (.h) вы должны объявить константу, а затем определить константу и присвоить значение в файле вашей реализации (.m) .

в общ.ч

extern NSString *const EX_XML_URL;

в Common.m

NSString *const EX_XML_URL = @"http://myurl.com/xmldata";


Это нормально, если в Common.m у вас есть только постоянные определения, если так получается. Просто убедитесь, что Common.m включен в файлы, которые скомпилированы и связаны с вашей целью.

4 голосов
/ 07 сентября 2011

Вы захотите разбить строки на 2 файла: один, который объявляет их extern в заголовочном файле, а другой, который фактически содержит литералы:

.h

extern NSString * const EX_XML_URL;

.m

NSString * const EX_XML_URL = @"http://myurl.com/xmldata";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...