0

我正在使用 Sprite Kit(因此针对 iOS 7+)编写 iOS 游戏,并且在初始化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)

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

有什么想法我哪里出错了吗?我对Objective-C还是很陌生,所以目前所有这些对我来说都是在黑暗中挣扎。

4

1 回答 1

1

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

NSString *getUUID();

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

+(NSString *)getUUID;

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

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

然后像这样称呼它

gameID = [helpers getUUID];

(旁注:类名通常以大写字母开头:“Helpers”。)

于 2014-02-10T09:24:01.843 回答