2013-10-29 3 views
1

저는 코드에서 GKChallengeListener를 구현하려고하는데 apple에서 GameCenterManager 클래스를 사용했습니다. 플레이어는 훌륭한 인증을 받았으며 리더 보드와 도전 과제도 있습니다. But i want to notify my application when the remote player completed the challenge. for this i have used GKChallengeListener protocols. but they are not calling up when i am sending or receiving the challenges에서 참조하십시오. 하지만 이것은에 감가 상각어떤 클래스가 GKLocalPlayerListener 프로토콜을 구현하는 데 사용됩니까

@implementation ViewController 

@synthesize gameCenterManager; 
@synthesize currentScore; 
@synthesize currentLeaderBoard; 
@synthesize currentScoreLabel; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.currentLeaderBoard = kLeaderboardID; 
    self.currentScore = 0; 
    if ([GameCenterManager isGameCenterAvailable]) { 
     self.gameCenterManager = [[GameCenterManager alloc] init]; 
     [self.gameCenterManager setDelegate:self]; 
     [self.gameCenterManager authenticateLocalUser]; 
    } else { 
     // The current device does not support Game Center. 
    } 
} 

-(void)player:(GKPlayer *)player issuedChallengeWasCompleted:(GKChallenge *)challenge byFriend:(GKPlayer *)friendPlayer{ 
    NSLog(@"issued challenge was completed by friend"); 

} 
-(void)player:(GKPlayer *)player didCompleteChallenge:(GKChallenge *)challenge issuedByFriend:(GKPlayer *)friendPlayer{ 
    NSLog(@"player did complete challenge"); 
} 
-(void)player:(GKPlayer *)player didReceiveChallenge:(GKChallenge *)challenge{ 
    NSLog(@"player did recieve challenge"); 
} 
-(void)player:(GKPlayer *)player wantsToPlayChallenge:(GKChallenge *)challenge{ 
    NSLog(@"player wants to play challenge "); 
} 
+0

만약 당신이 downvote 의견을 추가하십시오 – iOS

답변

3

ViewController.m에서 ViewController.h에서 https://developer.apple.com/library/ios/documentation/GameKit/Reference/GKEventListener_Ref/Reference/Reference.html#//apple_ref/occ/intf/GKChallengeListener

@interface ViewController : UIViewController <UIActionSheetDelegate, GameCenterManagerDelegate,GKGameCenterControllerDelegate,GKChallengeListener> { 
    GameCenterManager *gameCenterManager; 
    NSInteger currentScore; 
    NSString* currentLeaderBoard; 
    IBOutlet UILabel *currentScoreLabel; 
} 
@property (nonatomic, retain) GameCenterManager *gameCenterManager; 
@property (nonatomic, assign) NSInteger currentScore; 
@property (nonatomic, retain) NSString* currentLeaderBoard; 
@property (nonatomic, retain) UILabel *currentScoreLabel; 
- (IBAction) showLeaderboard; 
- (IBAction) increaseScore; 

@end 자아

을 위양을 호출하는 클래스 이해 DNT iOS 7.0에서이 방법을 사용할 수 있습니다.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.currentLeaderBoard = kLeaderboardID; 
    self.currentScore = 0; 
    if ([GameCenterManager isGameCenterAvailable]) { 

     self.gameCenterManager = [[GameCenterManager alloc] init]; 
     [self.gameCenterManager setDelegate:self]; 
     [self.gameCenterManager authenticateLocalUser]; 
    } else { 
     // The current device does not support Game Center. 
    } 
GKChallengeEventHandler 
    *gk 
    =[GKChallengeEventHandler challengeEventHandler].delegate=self; 
} 

- (void)localPlayerDidCompleteChallenge:(GKChallenge *)challenge 
{ 
    NSLog(@"localPlayerDidCompleteChallenge"); 
} 
- (void)localPlayerDidReceiveChallenge:(GKChallenge *)challenge 
{ 
    NSLog(@"localPlayerDidReceiveChallenge"); 
} 
- (void)localPlayerDidSelectChallenge:(GKChallenge *)challenge{ 
    NSLog(@"localPlayerDidSelectChallenge"); 
} 
- (void)remotePlayerDidCompleteChallenge:(GKChallenge *)challenge{ 
    NSLog(@"remotePlayerDidCompleteChallenge"); 
} 
- (BOOL)shouldShowBannerForLocallyCompletedChallenge:(GKChallenge *)challenge 
{ 
    return YES; 
} 
- (BOOL)shouldShowBannerForLocallyReceivedChallenge:(GKChallenge *)challenge 
{ 
    return YES; 
} 
- (BOOL)shouldShowBannerForRemotelyCompletedChallenge:(GKChallenge *)challenge 
{ 
    return YES; 
} 
2

오늘 약간 혼란 스럽습니다.

트릭은 GKLocalPlayerListener 프로토콜을 구현하는 객체를 localPlayer의 수신기로 등록하는 것입니다. 어 ... 글쎄, 그 문장은 그 자체로 되돌아 간 것처럼 보이지만 이것은 도움이 될 수 있습니다.

/* this happens inside my authenticateLocalPlayer method */ 
if ([GKLocalPlayer localPlayer].authenticated) { 
    [[GKLocalPlayer localPlayer] registerListener:self]; 
    // More stuff here 
    } 

그리고 같은 개체에서 나중에 프로토콜 방법을 구현합니다.

편집 : 오! 그리고 당신은 GKChallengeListener를 구현하지 않아도됩니다. GKLocalPlayerListener 만 구현하면됩니다. (나는 그것에 대한 링크를 게시하려했으나 지금 찾을 수 있다면 망했다.)

희망이있다.

관련 문제