xCode: Objective C: 重复符号错误

xCode: Objective C: duplicate symbol error

在文件 CarArray(没有任何扩展名)中,我有这样的数组(这是一个非常简化的版本):

NSString *cars[5][3] = {
    {@"1A", @"1B", @"1C"},
    {@"2A", @"2B", @"2C"},
    {@"3A", @"3B", @"3C"},
    {@"4A", @"4B", @"4C"},
    {@"5A", @"5B", @"5C"}
}

现在我想从多个文件中的数组中读取数据,所以我只需使用 #import "CarArray"

并且我使用循环读取数据。然后我得到这样的错误:

duplicate symbol _cars in:
/Users/Adam/Library/Developer/Xcode/DerivedData/Auto_Center-hgjlsqanvyynncgyfzuorxwchqov/Build/Intermediates/Auto Center.build/Debug-iphonesimulator/Auto Center.build/Objects-normal/i386/DetailViewController.o
/Users/Adam/Library/Developer/Xcode/DerivedData/Auto_Center-hgjlsqanvyynncgyfzuorxwchqov/Build/Intermediates/Auto Center.build/Debug-iphonesimulator/Auto Center.build/Objects-normal/i386/ModelListViewController.o
ld: 1 duplicate symbol for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我该如何解决这个问题?

Now I want to read the data from the array in multiple files so I simply use #import "CarArray"

这是从多个位置访问数组数据的不正确方法,因为它会在多次使用文件的情况下创建多个定义。

共享数组的一种方法是提供带有声明的 header 和带有实现的 .m 文件:

CarArray.h:

extern NSString *cars[5][3];

CarArray.m:

#import "CarArray.h"

NSString *cars[5][3] = {
    {@"1A", @"1B", @"1C"},
    {@"2A", @"2B", @"2C"},
    {@"3A", @"3B", @"3C"},
    {@"4A", @"4B", @"4C"},
    {@"5A", @"5B", @"5C"}
}

在您希望使用 cars 的文件中使用 #import "CarArray.h"

另一种方法是制作一个 class 来包装您的全局变量,并提供一个 class 方法来访问数组。

您应该在头文件 ("CarArray.h") 中声明 您的数组,但定义并初始化 它的值在单独的实现文件 ("CarArray.m").