Iphone 如何将GKMatchmakerViewController呈现给呈现的视图控制器?

Iphone 如何将GKMatchmakerViewController呈现给呈现的视图控制器?,iphone,ios,game-center,Iphone,Ios,Game Center,我正在我的游戏中实现实时游戏中心,但我在演示GKMatchmakerViewController时遇到问题。以下是我的情况: 在HomeViewController中,我将用下一个代码演示GameViewController: GameViewController *gameViewController = [[GameViewController alloc] initWithNibName:@"GameViewController" bundle:nil]; gameViewContro

我正在我的游戏中实现实时游戏中心,但我在演示
GKMatchmakerViewController
时遇到问题。以下是我的情况:

  • 在HomeViewController中,我将用下一个代码演示
    GameViewController

     GameViewController *gameViewController = [[GameViewController alloc] initWithNibName:@"GameViewController" bundle:nil];
     gameViewController.delegate = self;
     [self presentViewController:gameViewController animated:NO completion:nil];
    
  • 然后在
    GameViewController
    I中包括
    GCHelper
    并呼叫游戏中心开始比赛:

    -(void)viewDidAppear:(BOOL)animated
    
    {
        [super viewDidAppear:animated];
    
    
        [[GCHelper sharedInstance] authenticateLocalUser];
    
        [[GCHelper sharedInstance] findMatchWithMinPlayers:2 maxPlayers:2 viewController:self delegate:(id)self];
    
    
    }
    
  • 问题是游戏中心发出的我再次回来的小警报显示:

    但游戏中心的大窗口并没有显示出来。我确信问题在于我正在演示的
    GameViewController

    我怎样才能解决这个问题

    更新:

    当我试着打电话给HomeViewConroller的游戏中心时,一切都很完美

    更新2(已尝试): 我尝试使用GCHelper:

    [presentingViewController presentViewController:mmvc animated:YES completion:nil];
    
    使用:

    但我得到了一个错误: 其视图不在窗口层次结构中

    GCHelper.h
    
    GCHelper.h
    
    
    //
    //  GCHelper.h
    //  KvK
    //
    //  Created by Kalim on 11/22/12.
    //
    //
    
    #import <Foundation/Foundation.h>
    #import <GameKit/Gamekit.h>
    
    @interface GCHelper : NSObject<GKMatchmakerViewControllerDelegate, GKMatchDelegate>
    {
        BOOL isUserAuthenticated;
    
        UIViewController *presentingViewController;
        GKMatch *match;
        BOOL matchStarted;
    
        GKInvite *pendingInvite;
        NSArray *pendingPlayersToInvite;
        NSMutableDictionary *playersDict;
    
        NSString *MultiplayerID;
        NSData *MultiData;
        NSString *otherPlayerID;
    
        char AlertMessageBoxNo;
    
        BOOL isDataRecieved;
    }
    
    //variables
    
    @property (assign, readonly) BOOL gameCenterAvailable;
    @property (retain) UIViewController *presentingViewController;
    @property (retain) GKMatch *match;
    @property (retain) GKInvite *pendingInvite;
    @property (retain) NSArray *pendingPlayersToInvite;
    @property (retain) NSMutableDictionary *playersDict;
    
    @property (retain) NSString *MultiplayerID;
    @property (retain) NSData *MultiData;
    
    -(NSString*)getOtherPlayerId;
    -(void)setOtherPlayerId;
    //Functions
    + (GCHelper *)sharedInstance;
    -(BOOL)isGameCenterAvailable;
    -(void)authenticationChanged;
    -(void)authenticateLocalUser;
    
    -(void)gameOver:(NSString*)message;
    
    -(void)setDataRecieved:(BOOL)d;
    -(BOOL)getDataRecieved;
    
    
    - (void)findMatchWithMinPlayers:(int)minPlayers maxPlayers:(int)maxPlayers viewController:(UIViewController *)viewController;
    
    @end
    
    GCHelper.mm
    
    
    //
    //  GCHelper.m
    //  KvK
    //
    //  Created by Kalim on 11/22/12.
    //
    //
    
    #import "GCHelper.h"
    #import "IPadSharebleClass.h"
    
    
    @implementation GCHelper
    
    @synthesize gameCenterAvailable;
    @synthesize presentingViewController;
    @synthesize match;
    @synthesize pendingInvite;
    @synthesize pendingPlayersToInvite;
    @synthesize playersDict;
    @synthesize MultiData;
    @synthesize MultiplayerID;
    
    static GCHelper *sharedHelper = nil;
    
    +(GCHelper *) sharedInstance
    {
        if (!sharedHelper)
        {
            sharedHelper = [[GCHelper alloc] init];
        }
        return sharedHelper;
    }
    
    
    - (BOOL)isGameCenterAvailable
    {
        Class gcClass = (NSClassFromString(@"GKLocalPlayer"));
        NSString *reqSysVer = @"4.1";
        NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
        BOOL osVersionSupported = ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending);
        return (gcClass && osVersionSupported);
    }
    
    
    - (id)init
    {
        if ((self = [super init]))
        {
            gameCenterAvailable = [self isGameCenterAvailable];
            if (gameCenterAvailable)
            {
                NSNotificationCenter *nc =
                [NSNotificationCenter defaultCenter];
                [nc addObserver:self
                       selector:@selector(authenticationChanged)
                           name:GKPlayerAuthenticationDidChangeNotificationName
                         object:nil];
            }
            else
            {
                UIAlertView* alert=[[UIAlertView alloc]initWithTitle:@"Game Center Alert" message:@"Game Center Not Available" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
                [alert show];
                [alert release];
            }
        }
        return self;
    }
    
    -(void)authenticationChanged
    {
        if ([GKLocalPlayer localPlayer].isAuthenticated && !isUserAuthenticated)
        {
            NSLog(@"Authentication changed: player authenticated.");
            isUserAuthenticated = TRUE;
    
            [GKMatchmaker sharedMatchmaker].inviteHandler = ^(GKInvite *acceptedInvite, NSArray *playersToInvite)
            {
                NSLog(@"Received invite");
                self.pendingInvite = acceptedInvite;
                self.pendingPlayersToInvite = playersToInvite;
                IPadCallAnyWhereF.inviteReceived();
            };
    
        }
        else if (![GKLocalPlayer localPlayer].isAuthenticated && isUserAuthenticated)
        {
            NSLog(@"Authentication changed: player not authenticated");
            isUserAuthenticated = FALSE;
        }
    
    
    }
    
    - (void)authenticateLocalUser
    {
        if (!gameCenterAvailable) return;
    
        NSLog(@"Authenticating local user...");
        if ([GKLocalPlayer localPlayer].authenticated == NO)
        {
            [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:nil];
        }
        else
        {
            NSLog(@"Already authenticated!");
        }
    }
    
    -(void)findMatchWithMinPlayers:(int)minPlayers maxPlayers:(int)maxPlayers viewController:(UIViewController *)viewController
    {
        if (!gameCenterAvailable) return;
    
        matchStarted = NO;
        self.match = nil;
        self.presentingViewController = viewController;
        if (pendingInvite != nil)
        {
            [presentingViewController dismissModalViewControllerAnimated:NO];
            GKMatchmakerViewController *mmvc = [[[GKMatchmakerViewController alloc] initWithInvite:pendingInvite] autorelease];
            mmvc.matchmakerDelegate = self;
            [presentingViewController presentModalViewController:mmvc animated:YES];
    
            self.pendingInvite = nil;
            self.pendingPlayersToInvite = nil;
        }
        else
        {
            [presentingViewController dismissModalViewControllerAnimated:NO];
            GKMatchRequest *request = [[[GKMatchRequest alloc] init] autorelease];
            request.minPlayers = minPlayers;
            request.maxPlayers = maxPlayers;
            request.playersToInvite = pendingPlayersToInvite;
    
            GKMatchmakerViewController *mmvc = [[[GKMatchmakerViewController alloc] initWithMatchRequest:request] autorelease];
            mmvc.matchmakerDelegate = self;
    
            [presentingViewController presentModalViewController:mmvc animated:YES];
    
            self.pendingInvite = nil;
            self.pendingPlayersToInvite = nil;
    
        }
    
    }
    
    
    #pragma mark GKMatchmakerViewControllerDelegate
    - (void)matchmakerViewControllerWasCancelled:(GKMatchmakerViewController *)viewController
    {
        [presentingViewController dismissModalViewControllerAnimated:YES];
    
        UIAlertView* alert=[[UIAlertView alloc]initWithTitle:@"Game Center Alert" message:@"Game Cancel By you" delegate:self cancelButtonTitle:@"Try Again" otherButtonTitles:@"Main Menu", nil];
        [alert show];
        [alert release];
        AlertMessageBoxNo='E';
    }
    
    - (void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFailWithError:(NSError *)error
    {
        [presentingViewController dismissModalViewControllerAnimated:YES];
        NSLog(@"Error finding match: %@", error.localizedDescription);
        UIAlertView* alert=[[UIAlertView alloc]initWithTitle:@"Game Center Alert" message:@"Connection Time out" delegate:self cancelButtonTitle:@"Try Again" otherButtonTitles:@"Main Menu", nil];
        [alert show];
        [alert release];
        AlertMessageBoxNo='A';
    }
    
    
    - (void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFindMatch:(GKMatch *)theMatch
    {
        [presentingViewController dismissModalViewControllerAnimated:YES];
        self.match = theMatch;
        match.delegate = self;
        if (!matchStarted && match.expectedPlayerCount == 0)
        {
            NSLog(@"***************Ready to start match!**************");
            [self lookupPlayers];
        }
    }
    
    - (void)lookupPlayers
    {
        NSLog(@"Looking up %d players...", match.playerIDs.count);
        [GKPlayer loadPlayersForIdentifiers:match.playerIDs withCompletionHandler:^(NSArray *players, NSError *error)
         {
             if (error != nil)
             {
                 NSLog(@"Error retrieving player info: %@", error.localizedDescription);
                 matchStarted = NO;
                 //IPadCallAnyWhereF.matchEnded();
                 UIAlertView* alert=[[UIAlertView alloc]initWithTitle:@"Game Center Alert" message:@"Error retrieving player info" delegate:self cancelButtonTitle:@"Try Again" otherButtonTitles:@"Main Menu", nil];
                 [alert show];
                 [alert release];
                 AlertMessageBoxNo='F';
             }
             else
             {
                 self.playersDict = [NSMutableDictionary dictionaryWithCapacity:players.count];
                 for (GKPlayer *player in players)
                 {
                     NSLog(@"Found player: %@", player.alias);
                     [playersDict setObject:player forKey:player.playerID];
                 }
                 NSLog(@"Total Number of Players : %d",players.count);
                 matchStarted = YES;
                 IPadCallAnyWhereF.matchStarted();
             }
         }];
    
    }
    
    #pragma mark GKMatchDelegate
    - (void)match:(GKMatch *)theMatch didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID
    {
        if (match != theMatch) return;
    
        MultiData=data;
        MultiplayerID=playerID;
        if(otherPlayerID==nil)
        {
            otherPlayerID=[playerID retain];
        }
        IPadCallAnyWhereF.match();
    }
    
    -(void)setDataRecieved:(BOOL)d
    {
        isDataRecieved=d;
    }
    -(BOOL)getDataRecieved
    {
        return isDataRecieved;
    }
    
    
    -(NSString*)getOtherPlayerId
    {
        return otherPlayerID;
    }
    
    -(void)setOtherPlayerId
    {
        otherPlayerID=nil;
    }
    
    - (void)match:(GKMatch *)theMatch player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)state
    {
        if (match != theMatch) return;
        switch (state)
        {
            case GKPlayerStateConnected:
                NSLog(@"New Player connected!");
                if (!matchStarted && theMatch.expectedPlayerCount == 0)
                {
                    NSLog(@"&&&&&&&&&& Ready to start match in the match!");
                    [self lookupPlayers];
                }
                break;
            case GKPlayerStateDisconnected:
                NSLog(@"--------Player disconnected!--------");
                matchStarted = NO;
                UIAlertView* alert=[[UIAlertView alloc]initWithTitle:@"Game Center Alert" message:@"Player Disconnected" delegate:self cancelButtonTitle:@"Try Again" otherButtonTitles:@"Main Menu", nil];
                [alert show];
                [alert release];
                AlertMessageBoxNo='B';
                //IPadCallAnyWhereF.matchDisconnect();
                break;
        }
    }
    
    - (void)match:(GKMatch *)theMatch connectionWithPlayerFailed:(NSString *)playerID withError:(NSError *)error
    {
        if (match != theMatch) return;
    
        NSLog(@"Failed to connect to player with error: %@", error.localizedDescription);
        matchStarted = NO;
        //IPadCallAnyWhereF.matchEnded();
        UIAlertView* alert=[[UIAlertView alloc]initWithTitle:@"Game Center Alert" message:@"Failed to connect to player" delegate:self cancelButtonTitle:@"Try Again" otherButtonTitles:@"Main Menu", nil];
        [alert show];
        [alert release];
        AlertMessageBoxNo='C';
    
    }
    
    - (void)match:(GKMatch *)theMatch didFailWithError:(NSError *)error
    {
        if (match != theMatch) return;
    
        NSLog(@"Match failed with error: %@", error.localizedDescription);
        matchStarted = NO;
        //IPadCallAnyWhereF.matchEnded();
        UIAlertView* alert=[[UIAlertView alloc]initWithTitle:@"Game Center Alert" message:@"Match failed" delegate:self cancelButtonTitle:@"Try Again" otherButtonTitles:@"Main Menu", nil];
        [alert show];
        [alert release];
        AlertMessageBoxNo='D';
    
    }
    
    -(void)gameOver:(NSString*)message
    {
        UIAlertView* alert=[[UIAlertView alloc]initWithTitle:@"Game Center Alert" message:message delegate:self cancelButtonTitle:@"Try Again" otherButtonTitles:@"Main Menu", nil];
        [alert show];
        [alert release];
        AlertMessageBoxNo='G';
    }
    
    -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
    {
        NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
    
        if([title isEqualToString:@"Try Again"])
        {
            IPadCallAnyWhereF.matchDisconnect();
        }
        else if([title isEqualToString:@"Main Menu"])
        {
            IPadCallAnyWhereF.gotoMainMenu();
        }
    
    }
    
    
    
    @end
    
    // //GCHelper.h //KvK // //卡利姆于2012年11月22日创作。 // // #进口 #进口 @接口GCHelper:NSObject { BOOL是用户认证的; UIViewController*presentingViewController; GKMatch*match; 布尔匹配开始; GKIVITE*PendingVite; NSArray*暂停玩家进入; NSMutableDictionary*playersDict; NSString*多层网格; NSData*多数据; NSString*其他玩家ID; char AlertMessageBoxNo; 已收到布尔值; } //变数 @属性(分配,只读)BOOL gameCenterAvailable; @属性(保留)UIViewController*presentingViewController; @财产(保留)匹配*匹配; @不动产(保留)不动产*PendingVite; @不动产(保留)NSArray*PENDINGPLAYERS至INVITE; @属性(保留)NSMutableDictionary*PlayerDict; @属性(保留)NSString*多层网格; @财产(保留)NSData*多数据; -(NSString*)getOtherPlayerId; -(无效)设置其他玩家ID; //功能 +(GCHelper*)共享状态; -(BOOL)iGameCenter可用; -(作废)认证变更; -(无效)认证本地用户; -(void)gameOver:(NSString*)消息; -(无效)已接收的设置数据:(BOOL)d; -(BOOL)已收到的GetDataReceived; -(void)FindMatch with minPlayers:(int)minPlayers maxPlayers:(int)maxPlayers viewController:(UIViewController*)viewController; @结束 GCHelper.mm // //GCHelper.m //KvK // //卡利姆于2012年11月22日创作。 // // #导入“GCHelper.h” #导入“IPadSharebleClass.h” @实现GCHelper @可使用的游戏中心; @综合现有可视控制器; @综合匹配; @合成悬铃木; @合成悬铃木; @综合playersDict; @综合多种数据; @合成多层膜; 静态GCHelper*sharedHelper=nil; +(GCHelper*)共享状态 { 如果(!sharedHelper) { sharedHelper=[[GCHelper alloc]init]; } 返回sharedHelper; } -(BOOL)iGameCenter可用 { 类gcClass=(NSClassFromString(@“GKLocalPlayer”); NSString*reqSysVer=@“4.1”; NSString*currSysVer=[[UIDevice currentDevice]systemVersion]; BOOL osVersionSupported=([currSysVer比较:reqSysVer选项:NSNumericSearch]!=传感器解除搜索); 返回(支持gcClass和OSVersions(&O)); } -(id)init { if((self=[super init])) { gameCenterAvailable=[self-isGameCenterAvailable]; 如果(游戏中心可用) { NSNotificationCenter*nc= [NSNotificationCenter defaultCenter]; [nc addObserver:self] 选择器:@selector(authenticationChanged) 名称:GKPlayerAuthenticationDidChangeNotificationName 对象:无]; } 其他的 { UIAlertView*alert=[[UIAlertView alloc]initWithTitle:@“游戏中心警报”消息:@“游戏中心不可用”代理:无取消按钮:@“确定”其他按钮:无,无]; [警报显示]; [警报发布]; } } 回归自我; } -(无效)身份验证已更改 { 如果([GKLocalPlayer localPlayer].isAuthenticated&!isUserAuthenticated) { NSLog(@“身份验证已更改:玩家已验证”); isUserAuthenticated=TRUE; [GKMatchmaker sharedMatchmaker].inviteHandler=^(GKInvite*acceptedInvite,NSArray*PlayerToInvite) { NSLog(@“收到邀请”); self.pendingVite=接受的Vite; self.pendingPlayerToInvite=PlayerToInvite; IPadCallAnyWhereF.inviteReceived(); }; } 如果(![GKLocalPlayer.isAuthenticated&&isUserAuthenticated),则为else { NSLog(@“身份验证已更改:播放器未经身份验证”); isUserAuthenticated=FALSE; } } -(无效)authenticateLocalUser { 如果(!gameCenterAvailable)返回; NSLog(@“正在验证本地用户…”); if([GKLocalPlayer].authenticated==NO) { [[GKLocalPlayer]authenticateWithCompletionHandler:nil]; } 其他的 { NSLog(@“已通过身份验证!”); } } -(void)findMatchWithMinPlayers:(int)minPlayers maxPlayers:(int)maxPlayers viewController:(UIViewController*)viewController { 如果(!gameCenterAvailable)返回; 匹配开始=否; self.match=nil; self.presentingViewController=视图控制器; 如果(待决许可!=无) { [presentingViewController解除ModalViewController激活:否]; GKMatchmakerViewController*mmvc=[[GKMatchmakerViewController alloc]initWithInvite:pendingvite]autorelease]; mmvc.matchmakerDelegate=self; [presentingViewController presentModalViewController:mmvc动画:是]; self.pendingVite=零; self.pendingPlayersToInvite=nil; } 其他的 { [presentingViewController解除ModalViewController激活:否]; GKMatchRequest*请求=[[[GKMatchRequest alloc]init]autorelease]; request.minPlayers=minPlayers; request.max
    GCHelper.h
    
    
    //
    //  GCHelper.h
    //  KvK
    //
    //  Created by Kalim on 11/22/12.
    //
    //
    
    #import <Foundation/Foundation.h>
    #import <GameKit/Gamekit.h>
    
    @interface GCHelper : NSObject<GKMatchmakerViewControllerDelegate, GKMatchDelegate>
    {
        BOOL isUserAuthenticated;
    
        UIViewController *presentingViewController;
        GKMatch *match;
        BOOL matchStarted;
    
        GKInvite *pendingInvite;
        NSArray *pendingPlayersToInvite;
        NSMutableDictionary *playersDict;
    
        NSString *MultiplayerID;
        NSData *MultiData;
        NSString *otherPlayerID;
    
        char AlertMessageBoxNo;
    
        BOOL isDataRecieved;
    }
    
    //variables
    
    @property (assign, readonly) BOOL gameCenterAvailable;
    @property (retain) UIViewController *presentingViewController;
    @property (retain) GKMatch *match;
    @property (retain) GKInvite *pendingInvite;
    @property (retain) NSArray *pendingPlayersToInvite;
    @property (retain) NSMutableDictionary *playersDict;
    
    @property (retain) NSString *MultiplayerID;
    @property (retain) NSData *MultiData;
    
    -(NSString*)getOtherPlayerId;
    -(void)setOtherPlayerId;
    //Functions
    + (GCHelper *)sharedInstance;
    -(BOOL)isGameCenterAvailable;
    -(void)authenticationChanged;
    -(void)authenticateLocalUser;
    
    -(void)gameOver:(NSString*)message;
    
    -(void)setDataRecieved:(BOOL)d;
    -(BOOL)getDataRecieved;
    
    
    - (void)findMatchWithMinPlayers:(int)minPlayers maxPlayers:(int)maxPlayers viewController:(UIViewController *)viewController;
    
    @end
    
    GCHelper.mm
    
    
    //
    //  GCHelper.m
    //  KvK
    //
    //  Created by Kalim on 11/22/12.
    //
    //
    
    #import "GCHelper.h"
    #import "IPadSharebleClass.h"
    
    
    @implementation GCHelper
    
    @synthesize gameCenterAvailable;
    @synthesize presentingViewController;
    @synthesize match;
    @synthesize pendingInvite;
    @synthesize pendingPlayersToInvite;
    @synthesize playersDict;
    @synthesize MultiData;
    @synthesize MultiplayerID;
    
    static GCHelper *sharedHelper = nil;
    
    +(GCHelper *) sharedInstance
    {
        if (!sharedHelper)
        {
            sharedHelper = [[GCHelper alloc] init];
        }
        return sharedHelper;
    }
    
    
    - (BOOL)isGameCenterAvailable
    {
        Class gcClass = (NSClassFromString(@"GKLocalPlayer"));
        NSString *reqSysVer = @"4.1";
        NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
        BOOL osVersionSupported = ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending);
        return (gcClass && osVersionSupported);
    }
    
    
    - (id)init
    {
        if ((self = [super init]))
        {
            gameCenterAvailable = [self isGameCenterAvailable];
            if (gameCenterAvailable)
            {
                NSNotificationCenter *nc =
                [NSNotificationCenter defaultCenter];
                [nc addObserver:self
                       selector:@selector(authenticationChanged)
                           name:GKPlayerAuthenticationDidChangeNotificationName
                         object:nil];
            }
            else
            {
                UIAlertView* alert=[[UIAlertView alloc]initWithTitle:@"Game Center Alert" message:@"Game Center Not Available" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
                [alert show];
                [alert release];
            }
        }
        return self;
    }
    
    -(void)authenticationChanged
    {
        if ([GKLocalPlayer localPlayer].isAuthenticated && !isUserAuthenticated)
        {
            NSLog(@"Authentication changed: player authenticated.");
            isUserAuthenticated = TRUE;
    
            [GKMatchmaker sharedMatchmaker].inviteHandler = ^(GKInvite *acceptedInvite, NSArray *playersToInvite)
            {
                NSLog(@"Received invite");
                self.pendingInvite = acceptedInvite;
                self.pendingPlayersToInvite = playersToInvite;
                IPadCallAnyWhereF.inviteReceived();
            };
    
        }
        else if (![GKLocalPlayer localPlayer].isAuthenticated && isUserAuthenticated)
        {
            NSLog(@"Authentication changed: player not authenticated");
            isUserAuthenticated = FALSE;
        }
    
    
    }
    
    - (void)authenticateLocalUser
    {
        if (!gameCenterAvailable) return;
    
        NSLog(@"Authenticating local user...");
        if ([GKLocalPlayer localPlayer].authenticated == NO)
        {
            [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:nil];
        }
        else
        {
            NSLog(@"Already authenticated!");
        }
    }
    
    -(void)findMatchWithMinPlayers:(int)minPlayers maxPlayers:(int)maxPlayers viewController:(UIViewController *)viewController
    {
        if (!gameCenterAvailable) return;
    
        matchStarted = NO;
        self.match = nil;
        self.presentingViewController = viewController;
        if (pendingInvite != nil)
        {
            [presentingViewController dismissModalViewControllerAnimated:NO];
            GKMatchmakerViewController *mmvc = [[[GKMatchmakerViewController alloc] initWithInvite:pendingInvite] autorelease];
            mmvc.matchmakerDelegate = self;
            [presentingViewController presentModalViewController:mmvc animated:YES];
    
            self.pendingInvite = nil;
            self.pendingPlayersToInvite = nil;
        }
        else
        {
            [presentingViewController dismissModalViewControllerAnimated:NO];
            GKMatchRequest *request = [[[GKMatchRequest alloc] init] autorelease];
            request.minPlayers = minPlayers;
            request.maxPlayers = maxPlayers;
            request.playersToInvite = pendingPlayersToInvite;
    
            GKMatchmakerViewController *mmvc = [[[GKMatchmakerViewController alloc] initWithMatchRequest:request] autorelease];
            mmvc.matchmakerDelegate = self;
    
            [presentingViewController presentModalViewController:mmvc animated:YES];
    
            self.pendingInvite = nil;
            self.pendingPlayersToInvite = nil;
    
        }
    
    }
    
    
    #pragma mark GKMatchmakerViewControllerDelegate
    - (void)matchmakerViewControllerWasCancelled:(GKMatchmakerViewController *)viewController
    {
        [presentingViewController dismissModalViewControllerAnimated:YES];
    
        UIAlertView* alert=[[UIAlertView alloc]initWithTitle:@"Game Center Alert" message:@"Game Cancel By you" delegate:self cancelButtonTitle:@"Try Again" otherButtonTitles:@"Main Menu", nil];
        [alert show];
        [alert release];
        AlertMessageBoxNo='E';
    }
    
    - (void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFailWithError:(NSError *)error
    {
        [presentingViewController dismissModalViewControllerAnimated:YES];
        NSLog(@"Error finding match: %@", error.localizedDescription);
        UIAlertView* alert=[[UIAlertView alloc]initWithTitle:@"Game Center Alert" message:@"Connection Time out" delegate:self cancelButtonTitle:@"Try Again" otherButtonTitles:@"Main Menu", nil];
        [alert show];
        [alert release];
        AlertMessageBoxNo='A';
    }
    
    
    - (void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFindMatch:(GKMatch *)theMatch
    {
        [presentingViewController dismissModalViewControllerAnimated:YES];
        self.match = theMatch;
        match.delegate = self;
        if (!matchStarted && match.expectedPlayerCount == 0)
        {
            NSLog(@"***************Ready to start match!**************");
            [self lookupPlayers];
        }
    }
    
    - (void)lookupPlayers
    {
        NSLog(@"Looking up %d players...", match.playerIDs.count);
        [GKPlayer loadPlayersForIdentifiers:match.playerIDs withCompletionHandler:^(NSArray *players, NSError *error)
         {
             if (error != nil)
             {
                 NSLog(@"Error retrieving player info: %@", error.localizedDescription);
                 matchStarted = NO;
                 //IPadCallAnyWhereF.matchEnded();
                 UIAlertView* alert=[[UIAlertView alloc]initWithTitle:@"Game Center Alert" message:@"Error retrieving player info" delegate:self cancelButtonTitle:@"Try Again" otherButtonTitles:@"Main Menu", nil];
                 [alert show];
                 [alert release];
                 AlertMessageBoxNo='F';
             }
             else
             {
                 self.playersDict = [NSMutableDictionary dictionaryWithCapacity:players.count];
                 for (GKPlayer *player in players)
                 {
                     NSLog(@"Found player: %@", player.alias);
                     [playersDict setObject:player forKey:player.playerID];
                 }
                 NSLog(@"Total Number of Players : %d",players.count);
                 matchStarted = YES;
                 IPadCallAnyWhereF.matchStarted();
             }
         }];
    
    }
    
    #pragma mark GKMatchDelegate
    - (void)match:(GKMatch *)theMatch didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID
    {
        if (match != theMatch) return;
    
        MultiData=data;
        MultiplayerID=playerID;
        if(otherPlayerID==nil)
        {
            otherPlayerID=[playerID retain];
        }
        IPadCallAnyWhereF.match();
    }
    
    -(void)setDataRecieved:(BOOL)d
    {
        isDataRecieved=d;
    }
    -(BOOL)getDataRecieved
    {
        return isDataRecieved;
    }
    
    
    -(NSString*)getOtherPlayerId
    {
        return otherPlayerID;
    }
    
    -(void)setOtherPlayerId
    {
        otherPlayerID=nil;
    }
    
    - (void)match:(GKMatch *)theMatch player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)state
    {
        if (match != theMatch) return;
        switch (state)
        {
            case GKPlayerStateConnected:
                NSLog(@"New Player connected!");
                if (!matchStarted && theMatch.expectedPlayerCount == 0)
                {
                    NSLog(@"&&&&&&&&&& Ready to start match in the match!");
                    [self lookupPlayers];
                }
                break;
            case GKPlayerStateDisconnected:
                NSLog(@"--------Player disconnected!--------");
                matchStarted = NO;
                UIAlertView* alert=[[UIAlertView alloc]initWithTitle:@"Game Center Alert" message:@"Player Disconnected" delegate:self cancelButtonTitle:@"Try Again" otherButtonTitles:@"Main Menu", nil];
                [alert show];
                [alert release];
                AlertMessageBoxNo='B';
                //IPadCallAnyWhereF.matchDisconnect();
                break;
        }
    }
    
    - (void)match:(GKMatch *)theMatch connectionWithPlayerFailed:(NSString *)playerID withError:(NSError *)error
    {
        if (match != theMatch) return;
    
        NSLog(@"Failed to connect to player with error: %@", error.localizedDescription);
        matchStarted = NO;
        //IPadCallAnyWhereF.matchEnded();
        UIAlertView* alert=[[UIAlertView alloc]initWithTitle:@"Game Center Alert" message:@"Failed to connect to player" delegate:self cancelButtonTitle:@"Try Again" otherButtonTitles:@"Main Menu", nil];
        [alert show];
        [alert release];
        AlertMessageBoxNo='C';
    
    }
    
    - (void)match:(GKMatch *)theMatch didFailWithError:(NSError *)error
    {
        if (match != theMatch) return;
    
        NSLog(@"Match failed with error: %@", error.localizedDescription);
        matchStarted = NO;
        //IPadCallAnyWhereF.matchEnded();
        UIAlertView* alert=[[UIAlertView alloc]initWithTitle:@"Game Center Alert" message:@"Match failed" delegate:self cancelButtonTitle:@"Try Again" otherButtonTitles:@"Main Menu", nil];
        [alert show];
        [alert release];
        AlertMessageBoxNo='D';
    
    }
    
    -(void)gameOver:(NSString*)message
    {
        UIAlertView* alert=[[UIAlertView alloc]initWithTitle:@"Game Center Alert" message:message delegate:self cancelButtonTitle:@"Try Again" otherButtonTitles:@"Main Menu", nil];
        [alert show];
        [alert release];
        AlertMessageBoxNo='G';
    }
    
    -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
    {
        NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
    
        if([title isEqualToString:@"Try Again"])
        {
            IPadCallAnyWhereF.matchDisconnect();
        }
        else if([title isEqualToString:@"Main Menu"])
        {
            IPadCallAnyWhereF.gotoMainMenu();
        }
    
    }
    
    
    
    @end
    
    //[presentingViewController dismissViewControllerAnimated:NO completion:nil]; // that I removed
    
    GKMatchRequest *request = [[[GKMatchRequest alloc] init] autorelease];
    request.minPlayers = minPlayers;
    request.maxPlayers = maxPlayers;
    request.playersToInvite = pendingPlayersToInvite;
    
    GKMatchmakerViewController *mmvc = [[[GKMatchmakerViewController alloc] initWithMatchRequest:request] autorelease];
    mmvc.matchmakerDelegate = self;
    
    [presentingViewController presentViewController:mmvc animated:YES completion:nil];
    
    self.pendingInvite = nil;
    self.pendingPlayersToInvite = nil;