2015-10-20 5 views
1

Мне удалось заставить мою игру подписать игрока в игровой центр при запуске, но когда достигнут рекорд, он просто сохраняет его в игре, а не отправляет в игровой центр. Где бы я поставилИгра не отправит высокий балл в Game Center

[self reportScore]; 

это, кажется, чтобы сделать аварии симулятор, я приложил мой взгляд controller.m файл, если вы могли бы мне помочь с методом, чтобы сделать мою игру отправить в топ-лист Game Center, так что я могу двигаться чтобы опубликовать таблицу лидеров, чтобы отобразить таблицу лидеров в приложении. Я выполняю этот учебник, кстати http://www.appcoda.com/ios-game-kit-framework/

#import "ViewController.h" 
#import <GameKit/GameKit.h> 
#import <UIKit/UIKit.h> 
#import <iAd/iAd.h> 

@interface ViewController() 

@property (nonatomic, strong) NSString *leaderboardIdentifier; 
@property (nonatomic,assign) BOOL gameCenterEnabled; 

-(void)authenticateLocalPlayer; 
-(void)reportScore; 

@end 

@implementation ViewController 

-(void)reportScore{ 
    GKScore *score = [[GKScore alloc] initWithLeaderboardIdentifier:_leaderboardIdentifier]; 
    score.value = HighScoreNumber; 

    [GKScore reportScores:@[score] withCompletionHandler:^(NSError *error) { 
     if (error != nil) { 
      NSLog(@"%@", [error localizedDescription]); 
     } 
    }]; 
} 

-(void)authenticateLocalPlayer;{ 
    GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer]; 

    localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error){ 
     if (viewController != nil) { 
      [self presentViewController:viewController animated:YES completion:nil]; 
     } else { 
      if ([GKLocalPlayer localPlayer].authenticated) { 
       _gameCenterEnabled = YES; 

       // Get the default leaderboard identifier. 
       [[GKLocalPlayer localPlayer] loadDefaultLeaderboardIdentifierWithCompletionHandler:^(NSString   *leaderboardIdentifier, NSError *error) { 
        if (error != nil) { 
         NSLog(@"%@", [error localizedDescription]); 
        } else { 
         _leaderboardIdentifier = leaderboardIdentifier; 
        } 
       }]; 
      } else { 
       _gameCenterEnabled = NO; 
      } 
     } 
    }; 
} 

- (void)viewDidLoad 
{ 
    [self authenticateLocalPlayer]; 

    HighScoreNumber = [[NSUserDefaults standardUserDefaults] integerForKey:@"HighScoreSaved"]; 
    HighScore.text = [NSString stringWithFormat:@"High Score: %li", (long)HighScoreNumber]; 

    [super viewDidLoad]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
} 

#pragma mark iAd Delegate Methods 

-(void)bannerViewDidLoadAd:(ADBannerView *)banner { 
    [UIView beginAnimations:nil context:nil]; 

    [UIView setAnimationDuration:1]; 

    [banner setAlpha:1]; 

    [UIView commitAnimations]; 
} 

-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error { 
    [UIView beginAnimations:nil context:nil]; 

    [UIView setAnimationDuration:1]; 

    [banner setAlpha:0]; 

    [UIView commitAnimations]; 
} 

@end 
+0

Можете ли вы попытаться установить идентификатор лидера вручную без запроса GKLocalPlayer и посмотреть, исправляет ли он это? –

+0

Не повезло с этим, я начинаю с xcode, поэтому было бы полезно указать направление в правильном направлении, где я могу узнать, как реализовать игровой центр в своем приложении. Мне просто нужен рекорд, который уже сохранен игрой для отправки в таблицу лидеров игрового центра, которую я создал в itunes connect. – uz7

ответ

0

Вы можете попробовать, работает ли этот простой фрагмент кода для вас? _localPlayer относится к переменной экземпляра, которая устанавливается с помощью обработчика проверки подлинности.

- (IBAction)doAddAScore:(id)sender { 
    GKLocalPlayer *lp = [GKLocalPlayer localPlayer]; 
    NSInteger score = 100; 
    if (lp && lp.isAuthenticated) { 
     NSString *lbid = @"your.leaderboard.id"; 
     GKScore *gkScore = [[GKScore alloc] initWithLeaderboardIdentifier:lbid player:lp]; 
     gkScore.value = score; 
     [GKScore reportScores:@[gkScore] withCompletionHandler:^(NSError * _Nullable error) { 
      NSLog(@"GKScore::reportScores completed - error : %@", error); 
     }]; 
    } else { 
     NSLog(@"reporting score: localPlayer nil or not authenticated"); 
    } 
} 

Этот код является прототипом тестового прототипа, который я использую для разрешения приглашений на игру, и подача баллов только что сработала. Нет другой части кода, которая касается подачи баллов.

+0

. Я получаю сообщение об ошибке «Использование незаявленного идентификатора« _localPlayer »в этой строке GKLocalPlayer * lp = _localPlayer; – uz7

+0

Как уже упоминалось, _localPlayer - это переменная экземпляра в моем случае. Я изменил его так, чтобы он вытащил экземпляр с помощью [GKLocalPlayer localPlayer]. –

+0

как бы вы предложили мне включить его в свой код? – uz7