1

我对 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。当我尝试在 File2.m 中 #import "File1.h" 时,程序崩溃并为 charactersLocked 和 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 文件的。如果有更简单的方法可以访问该特定数组,请告诉我。对不起,如果这篇文章的格式很糟糕,这是我的第一次,所以请多多包涵。谢谢你。

4

1 回答 1

0

您的问题的简短答案位于此答案中;您需要声明变量,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以访问该数组。

于 2015-07-26T03:19:33.347 回答