对于标记行,我收到“在初始化期间从未读取存储到'myKeyArray'的值”消息,并且我不太明白为什么会这样。

- (void)createAndMigrateStatisticalDataForPlayersToV3 {

NSString *playerStatsfilePath = [self dataFilePath5];
NSString *playerDatafilePath = [self dataFilePath6];
NSArray *myKeyArray = [[NSArray alloc]init]; <<<< "Value stored to 'myKeyArray' during its initialization is never read"
NSMutableArray *theObjects = [[NSMutableArray alloc]init]; <<<< "Value stored to 'myKeyArray' during its initialization is never read"

NSFileManager *fileMgr;
fileMgr = [NSFileManager defaultManager];

if ([fileMgr fileExistsAtPath: playerDatafilePath] == YES) {

    NSMutableDictionary *gameFileDict = [NSMutableDictionary dictionaryWithContentsOfFile:playerDatafilePath];

    NSMutableArray *dataArray = [[NSMutableArray alloc]init];
    NSMutableArray *newDataArray = [[NSMutableArray alloc]init];

    myKeyArray = [gameFileDict allKeys];

    int nrOfKeys = [myKeyArray count];

    for (int oo = 0; oo < nrOfKeys; oo++) {
        theObjects = [gameFileDict valueForKey:[myKeyArray objectAtIndex:oo]];
        [dataArray addObject:[myKeyArray objectAtIndex:oo]];    // Name
        [dataArray addObject:[theObjects objectAtIndex:1]];     // # of games played
        [dataArray addObject:[theObjects objectAtIndex:2]];     // # correct answers
        [dataArray addObject:[theObjects objectAtIndex:3]];     // # questions
        [dataArray addObject:[theObjects objectAtIndex:4]];     // # of games won
        [dataArray addObject:[theObjects objectAtIndex:5]];     // # of games lost
    }

    int dataCount = [dataArray count];
    float avgNrOfQuestionsPerGame = 0;
    float avgNrCorrectAnswersPerGame = 0;
    float nrOfQuestions = 0;
    float nrOfCorrectAnswers = 0;
    float nrOfGamesPerPlayer = 0;
    float nrOfMatchesWonPerPlayer = 0;
    float nrOfMatchesLostPerPlayer = 0;

    for (int oo = 0; oo < dataCount; oo = oo + 6) {

        nrOfGamesPerPlayer = [[dataArray objectAtIndex:oo+1]floatValue];
        nrOfCorrectAnswers = [[dataArray objectAtIndex:oo+2]floatValue];
        nrOfQuestions = [[dataArray objectAtIndex:oo+3]floatValue];
        nrOfMatchesWonPerPlayer = [[dataArray objectAtIndex:oo+4]floatValue];
        nrOfMatchesLostPerPlayer = [[dataArray objectAtIndex:oo+5]floatValue];

        //           nrOfGamesPerPlayer = nrOfMatchesLostPerPlayer + nrOfMatchesLostPerPlayer;
        avgNrOfQuestionsPerGame = nrOfQuestions / nrOfGamesPerPlayer;
        avgNrCorrectAnswersPerGame = nrOfCorrectAnswers / nrOfGamesPerPlayer;

        for (int ff = 0; ff < nrOfGamesPerPlayer; ff++) {
            [newDataArray addObject:[dataArray objectAtIndex:oo]];      //PlayerName
            [newDataArray addObject:[self get_the_Date]];               //set todays date
            [newDataArray addObject:[NSNumber numberWithInt:avgNrOfQuestionsPerGame]];
            [newDataArray addObject:[NSNumber numberWithInt:avgNrCorrectAnswersPerGame]];


        }
    }
    [newDataArray writeToFile:playerStatsfilePath atomically: TRUE];
}

最佳答案

在为myKeyArray和theObjects分配内存后,您将同时对其进行重新分配,因此会发生大量内存泄漏。

删除带有分配的声明,并将变量声明移至执行分配的行:

NSArray *myKeyArray = [gameFileDict allKeys];

对象相同:
NSArray *theObjects = [gameFileDict valueForKey:[myKeyArray objectAtIndex:oo]];

请注意,您不必将其声明为NSMutableArray。您没有更改数组。

09-07 02:48