如何从另一个文件中的一个文件访问数组?

时间:2015-07-26 02:39:02

标签: arrays xcode file duplicates duplicate-symbol

我是Xcode的新手。我不太清楚在某些地方初始化变量时它究竟意味着什么,但我的代码是有效的,所以这不是问题......现在。无论如何,这是我的.h文件。到处都有一个" ----"它只是意味着那里有代码。

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>

NSInteger charactersLocked[3] = {0,0,1};
int charSel = 0;

@interface Tutorial : UIViewController 
{
    -------
}
------
@end

所以我需要访问不同.m文件中的数组字符,我们称之为File2和这一个File1。当我尝试#import&#34; File1.h&#34;在File2.m中,程序崩溃并为characterLocked和charSel提供了这个错误:

 duplicate symbol _charactersLocked in:
    /Users/me/Library/Developer/Xcode/DerivedData/SpaceRace-
    apawbkpiogvbvddranqfltyybuqr/Build/Intermediates/SpaceRace.build/Debug- 
    iphoneos/SpaceRace.build/Objects-normal/arm64/Tutorial.o
    /Users/me/Library/Developer/Xcode/DerivedData/SpaceRace
    apawbkpiogvbvddranqfltyybuqr/Build/Intermediates/SpaceRace.build/Debug-
    iphoneos/SpaceRace.build/Objects-normal/arm64/Space.o

我不知道这是什么。我曾尝试在线寻找解决方案,但似乎都没有。我不是偶然导入.m文件。如果有更简单的方法来访问该特定阵列,请告诉我。对不起,如果这篇文章的格式非常糟糕,这是我第一次跟我一起。谢谢。

1 个答案:

答案 0 :(得分:0)

您的问题的简短回答位于this answer;你需要将变量声明为extern,以便编译器知道你想在多个文件中使用它。

在Objective-C中很少这样做,因为它作为面向对象编程语言的传统意味着程序中的全局状态通常在类方法或单例类中处理。在不了解你的程序的情况下,我猜你想要一个类似于CharacterLocker的单例类,它看起来像这样:

<强> CharacterLocker.h

@interface CharacterLocker : NSObject
{
    NSInteger charactersLocked[3];
}

+ (id) sharedObject;

@property NSInteger* charactersLocked;

@end

<强> CharacterLocker.m

@implementation CharacterLocker

@synthesize charactersLocked;

+ (void) sharedObject
{
    static CharacterLocker *singleton = nil;

    // Required so that multiple calls to sharedObject don't create two
    static dispatch_once_t pred;
    dispatch_once(&pred, ^{ singleton = [[CharacterLocker alloc] init]; });
    return singleton;
}

- (id) init
{
    if ( self = [super init] )
    {
        charactersLocked[0] = 0;
        charactersLocked[1] = 0;
        charactersLocked[2] = 1;
    }
    return self;
}

@end

然后,在您的代码中,您调用[CharacterLocker sharedObject].charactersLocked来访问数组。