2014-02-10 25 views
0

我正在使用Sprite Kit(因此定位iOS 7+)編寫iOS遊戲,初始化gameObject(自定義類)時遇到問題。無法在類初始化程序中生成NSUUID - Apple Mach-O鏈接程序錯誤

如果我嘗試設置遊戲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仍然很陌生,因此目前對我來說這些都是黑暗中的一幕。

回答

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

相關問題