重复符号_webViewManager: 应用程序/生成/中间体/ app-name.build /调试-iphonesimulator / app-name.build /对象 - 正常/ x86_64的/ PostsShowViewController.o 应用程序/生成/中间体/ app-name.build /调试-iphonesimulator / app-name.build /对象 - 正常/ x86_64的/ FirstViewController.o ld:1个用于体系结构x86_64 clang的重复符号:错误:链接器 命令失败,退出代码为1(使用-v查看调用)
我在尝试编译时遇到上述错误。
当我尝试在两个不同的视图控制器中导入名为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"
,也会出现同样的错误。
编辑:
Constants.h
NSString *BASE_URL = @"google.com";
EDIT2:
出现WebViewManager:
FirstViewController.m
@implementation FirstViewController
WebViewManager *webViewManager;
答案 0 :(得分: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
。
好的,第2部分:
问题在于,有多个全局符号称为webViewManager
,因为您错误地声明了它们。使用:
@interface FirstViewController : UIViewController {
WebViewManager *_webViewManager;
}
(和其他类一样)。这使得它们成为实例变量,而不是全局变量。