2015-09-04 4 views
2

duplicate symbol _webViewManager in: app/Build/Intermediates/app-name.build/Debug-iphonesimulator/app-name.build/Objects-normal/x86_64/PostsShowViewController.o app/Build/Intermediates/app-name.build/Debug-iphonesimulator/app-name.build/Objects-normal/x86_64/FirstViewController.o ld: 1 duplicate symbol for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)Импорт заголовка дважды: дубликат символа для архитектуры x86_64

Я получаю ошибку выше, когда пытаюсь скомпилировать. Это происходит, когда я пытаюсь импортировать файл с именем WebViewManager.h в два разных контроллера просмотра.

WebViewManager.h

#import <UIKit/UIKit.h> 

@interface WebViewManager : NSObject 

@property (strong, nonatomic) UIWebView *webView; 

+ (id)getUniqueWebViewManager: (UIViewController *)container; 
- (void)loadUrlWithString: (NSString *)urlString; 
- (void) removeWebViewFromContainer; 

@end 

FirstViewController.m

#import "FirstViewController.h" 
#import "PostsShowViewController.h" 
#import "Constants.h" 
#import "AppDelegate.h" 
#import "WebViewManager.h" 

PostsShowController.m

#import "PostsShowViewController.h" 
#import "FirstViewController.h" 
#import "AppDelegate.h" 
#import "WebViewManager.h" 

Аналогично, такая же ошибка возникает, если я пытаюсь установить #import "Constants.h" в нескольких местах.

Edit:

Constants.h

NSString *BASE_URL = @"google.com"; 

Edit2:

вхождений WebViewManager:

FirstViewController.m

@implementation FirstViewController 

WebViewManager *webViewManager; 
+0

Вы дважды объявили тот же класс? Или класс с тем же именем уже существует в какой-то внешней зависимости? Иногда это происходит, если вы определяете материал в файле заголовка, а не в файле .m. –

+0

@SamhanSalahuddin hm .. Я не совсем уверен. Такая же ошибка возникает, когда я пытаюсь импортировать заголовочный файл, который имеет только одну строку: 'NSSTring * BASE_URL = @" google.com ";' в двух разных контроллерах представлений. –

+1

Просьба показать все вхождения 'webViewManager' в ваш проект (примечание: регистр важен). – trojanfoe

ответ

2

Вы забыли использовать extern в заголовочном файле, поэтому каждый файл реализации, который включает в себя Constants.h объявляет свой собственный экземпляр BASE_URL.

Вы хотите:

extern NSString *BASE_URL 

и это в Constants.m:

NSString *BASE_URL = @"google.com"; 

Кроме того, вы также можете просто использовать это в Constants.h:

#define BASE_URL @"google.com" 

и забыть о Constants.m.

Однако у меня недостаточно информации, чтобы рассказать вам, почему компоновщик жалуется на webViewManager.

OK, часть # 2:

Вопрос заключается в том, что существует несколько глобальных символов, называемых webViewManager, как вы неправильно объявляя их. Использование:

@interface FirstViewController : UIViewController { 
    WebViewManager *_webViewManager; 
} 

(и то же самое для другого класса). Это делает их переменными экземпляра, а не глобальными переменными.

+0

'Constants.h' - это просто файл, содержащий одну строку' BASE_URL'. Я включил его в вопрос, чтобы сказать даже без файлов «WebViewManager», если я попытаюсь включить простой заголовочный файл 'Constants.h' в несколько контроллеров представлений, я получаю сообщение об ошибке. –

+1

@MaximusS Хорошо, я обновил полу-ответ. – trojanfoe

Смежные вопросы