无法在类初始化程序中生成NSUUID - Apple Mach-O Linker错误

时间:2014-02-10 09:17:41

标签: ios objective-c uuid nsuuid

我正在使用Sprite Kit编写iOS游戏(因此针对iOS 7+),我在初始化gameObject(自定义类)时遇到了问题。

如果我尝试为游戏的ID设置UUID,则构建失败(请参阅下面的错误消息);删除对getUUID方法的调用可以解决问题,所以我很确定问题出在哪里。

getUUID方法位于辅助类中,该类在Prefix.pch中导入(因此所有其他文件都可以使用?)。

这是helpers.h

NSString *getUUID();

@interface helpers : NSObject

@end

helpers.m

@implementation helpers

+(NSString *)getUUID
{
    NSUUID *uuid = [NSUUID UUID];
    NSString *uuidString = [uuid UUIDString];

    return uuidString;
}

@end

最后,这是gameObject.m的样子:

static NSString *gameID = nil;
static NSDate *gameStarted = nil;
static NSNumber *venue = nil;
static NSNumber *timerDuration = nil;
static NSArray *players = nil;
static NSArray *playerMoves = nil;
static NSNumber *winner = nil;

@implementation gameObject

+(void) initialize
{
    if(! gameID)
    {
        // generate a new guid for this game
        gameID = getUUID();
    }
}

@end

我得到的错误是:

Undefined symbols for architecture i386:
  "_getUUID", referenced from:
      +[gameObject initialize] in gameObject.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我已经在SO上检查了针对此错误提到的所有常见修复:我的构建设置架构设置为arm64 arm7 arm7s,文件的目标设置正确,我的所有.m文件都包含在内在构建中。

我出错的任何想法?我对Objective-C还是很陌生,所以这一切对我来说都是在黑暗中肆虐。

1 个答案:

答案 0 :(得分:1)

您的helpers.h文件声明了函数

NSString *getUUID();

和helpers.m文件定义了一个类方法

+(NSString *)getUUID;

这是不一样的。所以你必须决定你想要哪一个。例如,改变 .h文件到

@interface helpers : NSObject
+(NSString *)getUUID;
@end

然后将其称为

gameID = [helpers getUUID];

(附注:班级名称通常以大写字母开头:“助手”。)