我是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文件。如果有更简单的方法来访问该特定阵列,请告诉我。对不起,如果这篇文章的格式非常糟糕,这是我第一次跟我一起。谢谢。
答案 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
来访问数组。