我正在使用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还是很陌生,所以这一切对我来说都是在黑暗中肆虐。
答案 0 :(得分:1)
您的helpers.h文件声明了函数:
NSString *getUUID();
和helpers.m文件定义了一个类方法:
+(NSString *)getUUID;
这是不一样的。所以你必须决定你想要哪一个。例如,改变 .h文件到
@interface helpers : NSObject
+(NSString *)getUUID;
@end
然后将其称为
gameID = [helpers getUUID];
(附注:班级名称通常以大写字母开头:“助手”。)