2011-12-11 73 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

沒有爲我工作。終止時仍然崩潰。謝謝你的方式... –

相關問題