2012-09-01 13 views
5

Estoy desarrollando un juego de box2d. En el juego, estoy usando la notificación push de PushWoosh. Está funcionando bien (recibiendo la notificación de inserción del servidor PushWoosh) pero cuando selecciono la notificación de inserción mi juego se bloquea. En AppDelegate aplicar como estopestaña la notificación de inserción juego cocos2d es crash

-En Appdelegate.h:

@interface AppDelegate:NSObject<UIApplicationDelegate,AdColonyDelegate,PushNotificationDelegate,UIAlertViewDelegate>{ 
     UIWindow   *window; 
     RootViewController *viewController; 
     PushNotificationManager *pushManager; 
    } 
    @property (nonatomic, retain) PushNotificationManager *pushManager; 
    @property (nonatomic, retain) UIWindow *window; 
    @property (nonatomic, retain) RootViewController *viewController; 
    @end 



    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 
     // Init the window 
    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 


    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationType)(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; 

    //initialize push manager instance 
    pushManager = [[PushNotificationManager alloc] initWithApplicationCode:@"PushWoosh App_ID" appName:@"App_Name" ]; 
    pushManager.delegate = self; 
    [pushManager handlePushReceived:launchOptions]; 
    /*pushManager = [[PushNotificationManager alloc] initWithApplicationCode:@"FA7CF-665BF" navController:self.viewController appName:@"Cricket" ]; 
    pushManager.delegate = self; 
    [pushManager handlePushReceived:launchOptions];*/ 

    // Try to use CADisplayLink director 
    // if it fails (SDK < 3.1) use the default director 
    if(! [CCDirector setDirectorType:kCCDirectorTypeDisplayLink]) 
     [CCDirector setDirectorType:kCCDirectorTypeDefault]; 


    CCDirector *director = [CCDirector sharedDirector]; 

    // Init the View Controller 
    viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil]; 
    viewController.wantsFullScreenLayout = YES; 

    // 
    // Create the EAGLView manually 
    // 1. Create a RGB565 format. Alternative: RGBA8 
    // 2. depth format of 0 bit. Use 16 or 24 bit for 3d effects, like CCPageTurnTransition 
    // 
    // 
    EAGLView *glView = [EAGLView viewWithFrame:[window bounds] 
            pixelFormat:kEAGLColorFormatRGB565 // kEAGLColorFormatRGBA8 
            depthFormat:0      // GL_DEPTH_COMPONENT16_OES 
         ]; 

    // attach the openglView to the director 
    [director setOpenGLView:glView]; 

    // Enables High Res mode (Retina Display) on iPhone 4 and maintains low res on all other devices 
    if (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad) 
    { 
     if(! [director enableRetinaDisplay:YES]) 
      CCLOG(@"Retina Display Not supported"); 
    } 

    // 
    // VERY IMPORTANT: 
    // If the rotation is going to be controlled by a UIViewController 
    // then the device orientation should be "Portrait". 
    // 
    // IMPORTANT: 
    // By default, this template only supports Landscape orientations. 
    // Edit the RootViewController.m file to edit the supported orientations. 
    // 
#if GAME_AUTOROTATION == kGameAutorotationUIViewController 
    [director setDeviceOrientation:kCCDeviceOrientationPortrait]; 
#else 
    [director setDeviceOrientation:kCCDeviceOrientationLandscapeRight]; 
#endif 

    [director setAnimationInterval:1.0/60]; 
    [director setDisplayFPS:YES]; 


    // make the OpenGLView a child of the view controller 
    [viewController setView:glView]; 

    // make the View Controller a child of the main window 
    [window addSubview: viewController.view]; 

    [window makeKeyAndVisible]; 

    // Default texture format for PNG/BMP/TIFF/JPEG/GIF images 
    // It can be RGBA8888, RGBA4444, RGB5_A1, RGB565 
    // You can change anytime. 
    [CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888]; 


    // Removes the startup flicker 
    [self removeStartupFlicker];  


    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    if(![defaults integerForKey:@"First"]) { 

     [[CCDirector sharedDirector]runWithScene:[MainMenu scene]]; 
    } 
    else { 

     [[CCDirector sharedDirector]runWithScene:[PlayAsGuestScene scene]]; 
    } 


    return YES; 
} 

    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{ 

     [pushManager handlePushReceived:userInfo]; 
} 
    - (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken{ 
    [pushManager handlePushRegistration:deviceToken]; 

    //you might want to send it to your backend if you use remote integration 
    NSString *token = [pushManager getPushToken]; 
} 

en la consola que estoy recibiendo este error: * Terminación de aplicación debido a excepción no detectada 'NSInvalidArgumentException', razón: '- [AppDelegate onPushAccepted:]: selector no reconocido enviado a la instancia 0xf50d290 '

¿Por qué sucede esto?

+1

Oh, en común, ¿nos dan más código cuando se cuelga? ¿Intentó configurar el punto de interrupción de excepción? Danos más información ... – mientus

Respuesta

1

Finalmente lo tengo. He cambiado a

-(void)applicationDidFinishLaunching:(UIApplication*)application{ 

    pushManager = [[PushNotificationManager alloc] initWithApplicationCode:@"PushWoosh App_ID" appName:@"App_Name" ]; 
    pushManager.delegate = self; 

} 

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{ 

     //write own code 
} 

Mi aplicación está trabajando sin accidente.

Cuestiones relacionadas