Fragen ziemlich viel im Titel, AuthPlayerWithCompletionHandler ist veraltet, so wie benutze ich authenticateHandler?authPlayerWithCompletionHandler Veraltet, so wie benutze ich authenticateHandler
Antwort
setAuthenticateHandler ist neu in iOS 6, authenticateWithCompletionHandler noch in iOS 5 und unten verwendet werden muss.
Auch ein Abschluss-Handler für presentViewController: animated: completion: ist nicht wirklich notwendig, da dieser Completion-Handler aufgerufen wird, nachdem die Game Center-Ansicht angezeigt wird, nicht wenn sie abgeschlossen ist.
Hier ist meine Lösung:
HINWEIS - getestet auf iOS 4.3, iOS 5.1, iOS 6.0 Simulatoren - nur nicht auf einem tatsächlichen Gerät.
HINWEIS - Dies setzt voraus, dass Sie überprüft haben, dass die GameCenter-API verfügbar ist.
- (void)checkLocalPlayer
{
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
if (localPlayer.isAuthenticated)
{
/* Perform additional tasks for the authenticated player here */
}
else
{
/* Perform additional tasks for the non-authenticated player here */
}
}
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] \
compare:v options:NSNumericSearch] == NSOrderedAscending)
- (void)authenticateLocalPlayer
{
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
if (SYSTEM_VERSION_LESS_THAN(@"6.0"))
{
// ios 5.x and below
[localPlayer authenticateWithCompletionHandler:^(NSError *error)
{
[self checkLocalPlayer];
}];
}
else
{
// ios 6.0 and above
[localPlayer setAuthenticateHandler:(^(UIViewController* viewcontroller, NSError *error) {
if (!error && viewcontroller)
{
[[AppDelegate sharedDelegate].viewController
presentViewController:viewcontroller animated:YES completion:nil];
}
else
{
[self checkLocalPlayer];
}
})];
}
}
}
Funktioniert gut! Wie werden Sie jedoch das Warnflag für die veraltete Methode loswerden? – msgambel
Setzen Sie das Deployment-Ziel einfach auf z. 5.0 oder was auch immer Ihr Ziel ist - wählen Sie das Projekt (oberste Zeile im Projektnavigator)> wählen Sie Ihre App unter Ziele> Zusammenfassung> Einsatzziel. –
Das ist, was ich gefunden habe - es scheint zu funktionieren. Fühlen Sie sich frei zu bearbeiten, wenn Sie denken, dass ich etwas verpasst habe.
-(void)authenticatePlayer {
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
[localPlayer setAuthenticateHandler:(^(UIViewController* viewcontroller, NSError *error) {
if (!error) {
[self presentViewController:viewcontroller animated:YES completion:^{
if (localPlayer.isAuthenticated)
{
// your code if authenticated
}
else {
// your code if not authenticated
}
}];
}
else {
// error handling code here
}
})];
}
Ich verwende diesen Code für iOS 6 und höher. Es gibt keine Compilerfehler und es scheint zu funktionieren.
#pragma
#pragma mark - Player Authentication
-(void)autheticatePlayer
{
__weak typeof(self) weakSelf = self; // removes retain cycle error
_localPlayer = [GKLocalPlayer localPlayer]; // localPlayer is the public GKLocalPlayer
__weak GKLocalPlayer *weakPlayer = _localPlayer; // removes retain cycle error
weakPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error)
{
if (viewController != nil)
{
[weakSelf showAuthenticationDialogWhenReasonable:viewController];
}
else if (weakPlayer.isAuthenticated)
{
[weakSelf authenticatedPlayer:weakPlayer];
}
else
{
[weakSelf disableGameCenter];
}
};
}
-(void)showAuthenticationDialogWhenReasonable:(UIViewController *)controller
{
[[[[[UIApplication sharedApplication] delegate] window] rootViewController] presentViewController:controller animated:YES completion:nil];
}
-(void)authenticatedPlayer:(GKLocalPlayer *)player
{
player = _localPlayer;
}
-(void)disableGameCenter
{
}
- 1. Wie benutze ich removeAtIndex wenn der var Parameter veraltet ist
- 2. Wie benutze ich cscope?
- 3. Wie benutze ich FastRoute?
- 4. Wie benutze ich ProGuard?
- 5. Wie benutze ich rand_r und wie benutze ich es threadsicher?
- 6. Wie benutze ich class_eval?
- 7. Wie benutze ich LevelDB?
- 8. Wie benutze ich gtk_widget_add_accelerator?
- 9. Wie benutze ich navigator.app.exitApp()?
- 10. Wie benutze ich NSSM
- 11. Wie benutze ich NSScanner?
- 12. Wie benutze ich json_encode?
- 13. Wie benutze ich CSSLint?
- 14. Wie benutze ich password_hash?
- 15. Wie benutze ich WaitForCursor?
- 16. Wie benutze ich UIImagePickerControllerCropRect
- 17. Wie benutze ich MigLayout?
- 18. Wie benutze ich base64EncodeData?
- 19. Wie benutze ich spl_autoload_register?
- 20. Wie benutze ich subList()
- 21. Wie benutze ich grails.plugin.location?
- 22. Wie benutze ich strcasestr()?
- 23. Wie benutze ich phpbrowserbox?
- 24. Wie benutze ich removeView()?
- 25. Wie benutze ich webgrease?
- 26. Wie benutze ich TDictionary?
- 27. Wie benutze ich TextAppearanceSpan
- 28. Wie benutze ich Effeckt.css?
- 29. Wie benutze ich sstableloader?
- 30. Wie benutze ich NSPR?
Lesen Sie die API-Diffs. –