我得到“在初始化过程中存储到'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];
}
答案 0 :(得分:7)
我会把这条线拿出来,你不需要初始化它。
//NSArray *myKeyArray = [[NSArray alloc]init];
将此更改为
NSArray *myKeyArray;
如果它是可变的,你只需要分配它。
答案 1 :(得分:1)
在为它们分配内存之后,你将重新分配myKeyArray和theObjects,因此你会有大量的内存泄漏。
使用分配删除声明,并将变量声明移动到执行赋值的行:
NSArray *myKeyArray = [gameFileDict allKeys];
对象:
NSArray *theObjects = [gameFileDict valueForKey:[myKeyArray objectAtIndex:oo]];
请注意,您不必将其声明为NSMutableArray。你没有改变阵列。