2014-10-30 32 views
1

我使用this tutorial創建了一款遊戲。當我打電話authenticateLocalPlayer像這樣:Objective C GameCenter authenticateHandler錯誤

GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; 

localPlayer.authenticateHandler = 
^(UIViewController *viewController, NSError *error) { 

    [self setLastError:error]; 
    if(viewController != nil) { 
     [self setAuthenticationViewController:viewController]; 
    } else if([GKLocalPlayer localPlayer].isAuthenticated) { 
     _enableGameCenter = YES; 
    } else { 
     _enableGameCenter = NO; 
    } 
}; 

我得到一個錯誤:

-[GKUnauthenticatedPlayerInternal name]: unrecognized selector sent to instance 0x14517e00 

,但是當我添加​​這樣的:

GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; 

[NSThread sleepForTimeInterval:1]; 
localPlayer.authenticateHandler = 
^(UIViewController *viewController, NSError *error) { 

    [self setLastError:error]; 
    if(viewController != nil) { 
     [self setAuthenticationViewController:viewController]; 
    } else if([GKLocalPlayer localPlayer].isAuthenticated) { 
     _enableGameCenter = YES; 
    } else { 
     _enableGameCenter = NO; 
    } 
}; 

它開始工作的罰款。這是解決錯誤的正確方法嗎?

+0

NSThread黑客不適合我。你有沒有找到關於這個的更多信息,或者可能是更好的黑客? – erdekhayser 2014-11-15 03:34:23

回答

0

我有同樣的問題。隨機睡眠對我無法解決。

我覺得很奇怪,我在互聯網上找不到任何其他的這個問題。我們不能是唯一有這個問題的人,我們可以嗎?

+0

我只是意識到我的遊戲最近有這個問題。不知道它的來源。我會回來的時候(如果?)我從另一邊回來! – erdekhayser 2014-11-15 02:23:00

+0

所以我發現調用來自'localPlayer.authenicateHandler = ^(UIViewController * viewController,NSError * error){}'這一行。發生這種情況*即使塊是空的*。 – erdekhayser 2014-11-15 02:46:10

+0

是的,我也發現了。這似乎是Apple推薦的方式。所以我想知道其他人是如何做到這一點的? – Daniel 2014-11-15 08:51:53

0

我發現是什麼引發了我的崩潰是 [self performSelector: @selector(showLabel) withObject: nil afterDelay: 5], 的調用,其中self是SKSpriteNode。請注意,這並不是選擇器被調用的時刻,而是在執行選擇器的時候,我得到了崩潰。另外請注意,該通話根本與GKLocalPlayer或Game Center完全沒有關係。

什麼解決的問題是使用SKAction代替,就像這樣:

[self runAction: 
     [SKAction sequence: @[[SKAction waitForDuration:5], 
          [SKAction performSelector: @selector(showLabel) onTarget: self]]]]; 

我真的不能解釋爲什麼這樣做的伎倆。這似乎是一個與iOS 8.1不太明顯的錯誤,因爲這從來沒有成爲一個問題。

0

看起來訣竅是不要從viewDidLoad啓動Game Center。如果您確實從那裏撥打電話,請在延遲後致電。一致認爲這在iOS 8.1和8.1.1中被破壞了,因爲它從未成爲一個問題。

0

看來這是iOS 8.0-8.2的問題。在我的實驗中,它似乎在iOS 8.3中得到了解決。奇怪的是,我的其他遊戲的代碼庫似乎始終如一地運行(儘管我沒有做過徹底的測試)。