2014-02-10 1 views
0

Я пишу игру iOS с помощью Sprite Kit (так что ориентирован на iOS 7+), и я столкнулся с проблемой при инициализации gameObject (пользовательский класс).Невозможно сгенерировать NSUUID в инициализаторе класса - ошибка Apple Mach-O Linker

Если я попытаюсь установить UUID для ID игры, сборка завершится неудачей (см. Ниже для сообщения об ошибке); устранение вызова метода 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

Файл helpers.h объявляет функцию:

NSString *getUUID(); 

и файл helpers.m определяет класс методу:

+(NSString *)getUUID; 

, который не является тем же самым. Поэтому вам нужно решить, какой из них вы хотите. Например, изменить .h файл

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

, а затем вызвать его, как

gameID = [helpers getUUID]; 

(Примечание стороны: имена классов, как правило, начинаются с прописной буквы: "Помощники".)

+0

Отлично. Спасибо! Как я уже сказал, я все еще изучаю Objective-C/C++, поэтому на данный момент я делаю много глупых ошибок. Я учился на своих ошибках - медленно - благодаря таким полезным людям, как вы, так что Upvote и Accept на пути. – MassivePenguin