Следующий код не будет компилироваться из-за ошибки, возникающей при попытке установить делегат GKLeaderboardViewController для вызывающего экземпляра.
Сообщение об ошибке:
Assigning to 'id<UINavigationControllerDelegate>' from incompatible type 'MainMenu *'
где MainMenu имеет тип CCLayer.
Если оператор присваивания (leaderboard.delegate = self) закомментирован, код скомпилируется, таблица лидеров будет отображаться, но обратный вызов не будет вызываться при нажатии кнопки «Готово».
Это код:
- (void) showLeaderBoard {
// Show GC leaderboard
GKLeaderboardViewController *leaderboard = [[GKLeaderboardViewController alloc] init];
if (leaderboard != nil) {
leaderboard.delegate = self;
leaderboard.category = @"ldrbrd_ref";
AppController *app = (AppController *)[[UIApplication sharedApplication] delegate];
[[app navController] presentViewController:leaderboard animated:YES completion:nil];
}
}
Кстати, это мой заголовок для объявления объекта:
#import <Foundation/Foundation.h>
#import "cocos2d.h"
#import "CCGameButton.h"
#import <GameKit/GameKit.h>
@interface MainMenu : CCLayer <CCGameButtonDelegate, GKLeaderboardViewControllerDelegate> {
}
+ (CCScene *) scene;
@end
Что я делаю неправильно? Любая помощь приветствуется!