2011-12-11 71 views
0

当我尝试将当前级别的计数保存到applicationWillTerminate函数中的NSUserDefaults时,它崩溃在我身上。为什么?当试图保存到NSUserDefaults时崩溃

----------------------- AppDelegate.m -------------------- ---

 - (void)applicationWillTerminate:(UIApplication *)application { 
      CCDirector *director = [CCDirector sharedDirector]; 

      HelloWorldLayer *hWClass = [[HelloWorldLayer alloc]init]; 

      NSNumber *lCount = [NSNumber numberWithInt:hWClass -> level]; 

      hWClass -> lvlCount =[NSUserDefaults standardUserDefaults]; 
      [hWClass -> lvlCount setObject:lCount forKey:@"levelCount"]; 



      [[director openGLView] removeFromSuperview]; 

      [viewController release]; 

      [window release]; 

      [director end]; 
     } 

----------------------- HelloWorldLayer.h -------------- ---------

 ...{ 
     @public 
     int level; 
     NSUserDefaults *lvlCount; 
     int health; 
     ... 
     } 
     @property (nonatomic,retain) NSUserDefaults *lvlCount; 

----------------------- HelloWorldLayer.m -------- ---------------

NSNumber *currentLevel = [[NSUserDefaults standardUserDefaults] objectForKey:@"levelCount"]; 
     if (currentLevel != nil){ 
     int cLevel = [currentLevel integerValue]; 

     [self generateLevelFromPlist:cLevel]; 
     }else{ 
      [self generateLevelFromPlist:1]; 
     } 

回答

0

您正在访问实例变量直接使用->,然后为其分配一个自动发布的值。您需要使用点语法访问该属性才能正确保留它。

hWClass.lvlCount =[NSUserDefaults standardUserDefaults]; 
    [hWClass.lvlCount setObject:lCount forKey:@"levelCount"]; 

由remove @public也改变了以下变量声明为私有或将其更改为@private所以你没有这个问题了。

...{ 
    @private 
    int level; 
    NSUserDefaults *lvlCount; 
    int health; 
    ... 
    } 
+0

没有为我工作。终止时仍然崩溃。谢谢你的方式... –

相关问题