无法弄清楚如何处理因重复符号而产生的铿锵声错误

时间:2017-11-01 20:01:34

标签: ios objective-c xcode

我遇到过这个铿锵声错误:

重复符号_downloading in:

/Users/admin/Library/Developer/Xcode/DerivedData/SD-QuickPic-bloifhodgiduzhdygkblxycilunk/Build/Intermediates.noindex/SD-QuickPic.build/Debug-iphoneos/SD-QuickPic.build/Objects-normal/arm64/DispatchList.o

/Users/admin/Library/Developer/Xcode/DerivedData/SD-QuickPic-bloifhodgiduzhdygkblxycilunk/Build/Intermediates.noindex/SD-QuickPic.build/Debug-iphoneos/SD-QuickPic.build/Objects-normal/arm64/DispatchImageList.o

ld:1架构arm64的重复符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

我发现了类似的问题并试图实施他们的解决方案无济于事。

目前的解决方法是更改​​"下载"的所有实例。在这个.h文件中"下载图像"。这使错误消失但可能不是正确的解决方案。

#import "DispatchImageList.h"
#import "Constants.h"
#import "FrapiTransaction.h"
#import "FrapiManager.h"

@implementation DispatchImageList

BOOL downloadingImage;

- (id) initWithDispatch:(Dispatch*)dispatch {
    self = [super init];
    if (self != nil) {
        downloadingImage = false;
        _dispatch = dispatch;
    }

    return self;
}

- (BOOL) isDownloading {
    return downloadingImage;
}

@end 

1 个答案:

答案 0 :(得分:0)

您的.m文件存在严重缺陷。您的downloadingdownloadingImage)变量是全局变量,而不是类的实例变量。

更改这两行:

@implementation DispatchImageList

BOOL downloadingImage;

为:

@implementation DispatchImageList {
    BOOL downloadingImage;
}

通过将变量放在@implementation行的花括号中,变量从全局变为实例变量。现在你不会有任何名称冲突,你可以命名变量,而不必担心其他一些类具有相同的实例变量名。而且,更重要的是,类的每个实例现在都获得了自己的变量副本,而不是应用程序中共享相同全局变量的所有实例。