2014-02-10 3 views
0

Sprite Kit (iOS 7+를 타겟팅)를 사용하여 iOS 게임을 작성 중이며 gameObject (사용자 정의 클래스)을 초기화 할 때 문제가 발생합니다.클래스 이니셜 라이저에서 NSUUID를 생성 할 수 없습니다. Apple Mach-O Linker 오류

게임의 ID로 UUID를 설정하려고하면 빌드가 실패합니다 (아래 오류 메시지 참조). getUUID 메서드 호출을 제거하면 문제가 해결되므로 문제가있는 곳을 확실히 알 수 있습니다.

getUUID 메서드는 Prefix.pch에서 가져온 도우미 클래스 안에 있으므로 다른 모든 파일에서도 사용할 수 있어야합니다. 여기, 마지막으로

@implementation helpers 

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

    return uuidString; 
} 

@end 

처럼 gameObject.m 보이는 내용은 다음과 같습니다 :

NSString *getUUID(); 

@interface helpers : NSObject 

@end 

그리고 helpers.m : 여기

helpers.h입니다입니다

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; 

합니다. 그래서 당신은 당신이 원하는 것을 결정해야합니다. 예를 들어,

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

에 .H 파일을 변경하고 다음과 같이 호출

gameID = [helpers getUUID]; 

(사이드 참고 : "도우미". : 클래스 이름은 일반적으로 대문자로 시작)

+0

완전한. 고맙습니다! 내가 말했듯이, 나는 여전히 Objective-C/C++를 배우고 있으므로, 지금은 이렇게 많은 어리석은 실수를하고 있습니다. 저는 실수로 배우고 있습니다. 천천히 - 당신 같은 도움이되는 사람들 덕분에, 그래서 Upvote와 Accept. – MassivePenguin