2011-05-09 41 views
0

在成果報告期間遇到錯誤時,我將它添加到數組中,然後將數組保存到NSUserDefaults。但是,保存的信息始終爲零。你如何正確保留數據?我嘗試添加成就時調用retain,但這不會改變任何內容。我寫數據,可以看到文件,但裏面的對象是零。正確保留GKAchievement以便保存

- (void)reportAchievementIdentifier:(NSString*)identifier percentComplete:(float)percent 
{ 
    if (self.isGameCenterEnabled) { 
     GKAchievement *achievement = [[[GKAchievement alloc] initWithIdentifier:identifier] autorelease]; 
     if (achievement) 
     { 
      achievement.percentComplete = percent; 
      [achievement reportAchievementWithCompletionHandler:^(NSError *error) 
      { 
       if (error != nil) 
       { 
        if (![outstandingAchievementsToReport containsObject:achievement]){ 
         [outstandingAchievementsToReport addObject:achievement]; 
         [self saveUnsyncedAchievements]; 
        } 
       } 
      }]; 
     } 
    } 
} 

- (void)saveUnsyncedAchievements 
{ 
    NSString *docsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString *savePath = [docsPath stringByAppendingPathComponent:@"Achievements"]; 

    // Write to disk  
    if (![NSKeyedArchiver archiveRootObject:outstandingAchievementsToReport toFile:savePath]) {  
     NSLog(@" archiver write failed."); 
    } else { 
     NSLog(@" archiver write succeeded."); 
    } 
} 

- (void)loadUnsyncedAchievements 
{ 
    NSString *docsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString *savePath = [docsPath stringByAppendingPathComponent:@"Achievements"]; 

    // Read from disk 
    outstandingAchievementsToReport = [NSKeyedUnarchiver unarchiveObjectWithFile:savePath]; 

    NSLog(@"outstandingAchievementsToReport count = %d", [outstandingAchievementsToReport count]); 
} 

- (void) reportOutstandingAchievements { 
    NSLog(@"Report all outstanding achievements."); 
    for (GKAchievement *achievement in outstandingAchievementsToReport) { 
     [self reportAchievementIdentifier:achievement.identifier percentComplete:achievement.percentComplete]; 
    } 
} 

回答

0

即使數組在init中被分配,它也會出現reportAchievement方法,認爲它是nil。測試沒有解決問題。

- (void)reportAchievementIdentifier:(NSString*)identifier percentComplete:(float)percent 
{ 
    if (self.isGameCenterEnabled) { 
     GKAchievement *achievement = [[[GKAchievement alloc] initWithIdentifier:identifier] autorelease]; 
     if (achievement) 
     { 
      achievement.percentComplete = percent; 
      [achievement reportAchievementWithCompletionHandler:^(NSError *error) 
      { 
       if (error != nil) 
       { 
        if (nil == outstandingAchievementsToReport) 
         outstandingAchievementsToReport = [[NSMutableArray alloc] init]; 

        if (![outstandingAchievementsToReport containsObject:achievement]){ 
         [outstandingAchievementsToReport addObject:achievement]; 
        } 
       } 
      }]; 
     } 
    } 
} 
相關問題