UIView не будет транслироваться в SKView

Я пытался внедрить Game Center в свою игру Sprite Kit, но каждый раз, когда я пытаюсь представить таблицу лидеров...

-(void)showLeaderboard:(UIViewController*)gcvc {
    GKGameCenterViewController *leaderboardController = [[GKGameCenterViewController alloc] init];
    if (leaderboardController != NULL)
    {
        leaderboardController.leaderboardIdentifier = @"Game_Leaderboard";
        leaderboardController.viewState = GKGameCenterViewControllerStateLeaderboards;
        leaderboardController.gameCenterDelegate = self;
        UIViewController *vc = self.view.window.rootViewController;
        [vc presentViewController: leaderboardController animated: YES completion:nil];
    }
}

Игра вылетает при запуске с ошибкой:

[UIView setShowsDrawCount:]: нераспознанный селектор отправлен экземпляру 0x178169e40 (lldb)

Я просмотрел связанные вопросы, и все они предлагают изменить класс View в IB на класс SKView, но не повезло. Точка останова исключения останавливается на строке:

SKView *spriteView = (SKView *)self.view;
spriteView.showsDrawCount = YES;

И вид явно типа SKView, но все равно пишет, что spriteView типа UIView. Я не уверен, что это имеет значение, поскольку основной контроллер представления игры является подклассом UIViewController, что необходимо для представления таблицы лидеров Game Center, поэтому я понятия не имею, как исправить эту ошибку.


person evanlws    schedule 29.05.2014    source источник
comment
Ваша проблема может показаться не связанной с таблицей лидеров. Где линия (SKView *)self.view и почему вы говорите, что это SKView (как вы это доказали)?   -  person Wain    schedule 29.05.2014
comment
Что такое self? Вы уверены, что self.view это SKView? Если это не так, вы не можете просто разыграть его таким образом и сделать его SKView. Кастинг работает не так.   -  person Fogmeister    schedule 29.05.2014
comment
это не skview и вы ошибаетесь... время выполнения не врет :)   -  person Daij-Djan    schedule 29.05.2014
comment
(SKView *)self.view находится в моем методе viewDidLoad GameViewController. Он используется для создания представления внутри контроллера представления из Документация Apple В построителе интерфейсов я назначил представление внутри игрового контроллера представления классу SKView.   -  person evanlws    schedule 29.05.2014
comment
У вас включен iAd? На SO таких проблем много, потому что iAD, по-видимому, заменяет представление контроллера представления (SKView) своим AdBannerView.   -  person LearnCocos2D    schedule 29.05.2014
comment
Нет, на самом деле я обсуждал их реализацию сразу после того, как заработала таблица лидеров Game Center! Я рассматривал альтернативы, поэтому, скорее всего, буду использовать их.   -  person evanlws    schedule 29.05.2014


Ответы (2)


Что ж, после долгих доработок, по-видимому, была пара проблем с кодом. UIViewController *vc = self.view.window.rootViewController; не был нужен, так как я уже передал контроллер представления в качестве параметра, и вместо того, чтобы следовать коду Apple для создания SKView, я просто подключил IBOutlet и избавился от SKView *spriteView = (SKView *)self.view; я бы никогда даже не подумал изменить метод viewDidLoad, поэтому Спасибо ребята!

person evanlws    schedule 29.05.2014

Как бы то ни было, я обычно получаю SKView из основного UIViewController следующим образом:

/// Returns the Director's own view, but as a SKView *.
@property (weak, readonly) SKView * skview;

// ...

- (SKView *) skview {
  return (SKView *)self.view;
}
person CloakedEddy    schedule 30.05.2014