NSMutableArray не будет добавлять NSDictionary - PullRequest
0 голосов
/ 03 марта 2011

Я обновился до cocos2d с 0.99.4 до 0.99.5. В то время как это было на более старой версии, у меня был рабочий список рекордов, и я смог добавить NSDictionary в NSMutableArray без проблем.

Теперь, когда я обновил, он не добавит переменную NSDictionary ScoreDetails в мой список результатов NSMutableArray. Вот мой код:

StatsManager.h

@interface StatsManager : NSObject {
NSMutableArray *scoreList;
NSUserDefaults *saveHighScore;
NSMutableArray *printableScoreList;

//NSMutableArray *scoreListTestOne;
float highScoreHelloWorld;
}

StatsManager.m

-(void)setHighScore:(float)highScore nameStrings:(NSString*)nameString {

NSNumber *newHighScore = [NSNumber numberWithFloat:highScore];
NSLog(@"%@ highScore", newHighScore);

NSDictionary *scoreDetails = [NSDictionary dictionaryWithObjectsAndKeys:nameString, @"name", newHighScore, @"score", nil];

NSLog(@"%@", scoreDetails);
//NSMutableArray *testTwo = [[NSMutableArray alloc] init];
[scoreList addObject:scoreDetails];
NSLog(@"scoreList %@", scoreList);
//[scoreListTestOne addObject:scoreDetails];
//NSLog(@"scoreListTestOne %@", scoreListTestOne);
//sort
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"score" ascending:NO];
[scoreList sortUsingDescriptors:[NSArray arrayWithObject:sort]];

printableScoreList = scoreList;
NSLog(@"printableScoreList %@", printableScoreList);
//NSLog(@"scoreListTestOne %@", scoreListTestOne);
}

Строка, о которой идет речь,

    [scoreList addObject:scoreDetails];

Я создал локальную переменную NSMutableArray в функции setHighScore и попытался добавить к ней ScoreDetails, и это сработало. но почему это не работает, как я уже кодировал выше?

Я размещаю свой счет здесь:

@implementation StatsManager
static StatsManager *_sharedStatsManager = nil;
-(id)init {
    scoreList = [[NSMutableArray alloc] init];
    //playerNames = [[NSMutableArray alloc] init];
    //playerScores = [[NSMutableArray alloc] init];
    printableScoreList = [[NSMutableArray alloc] init];

//listOfScoresTest = [[NSMutableDictionary alloc] initWithCapacity:5];
/*if ([scoreList count] == 0) {
    for (int i = 0; i < 5; i++) {
        [scoreList addObject:[NSNumber numberWithFloat:0.00]];
    }
}*/

return [super init];
}

Я должен также упомянуть, что я создал новый проектB и перенес мои файлы / изображения из моего старого проекта A в новый, потому что старый не будет компилироваться больше из-за некоторой повторяющейся ошибки. Но я снова «очистил все цели», и это сработало, но у меня та же проблема, что и у моего нового проектаB

Ответы [ 2 ]

1 голос
/ 03 марта 2011

Вы инициализируете ScoreList ivar в init или так далее?

- (id)init
{
    /* snip */
    scoreList = [[NSMutableArray alloc] init];
    return self;
}

- (void)dealloc
{
    [scoreList release];
    [super dealloc];
}
0 голосов
/ 03 марта 2011

Хорошо, Георг. Я пересмотрел твоё предложение о перезаписи позже.

и это как-то связано с моими NSUserdefaults. Я закомментировал их, и теперь он добавляет объекты в мой NSMutableArray. Я довольно новичок в NSUserdefaults, поэтому я не знаю точно, как его использовать atm lol

    -(void)save
{

    //make another array to save the scores.
    saveHighScore = [NSUserDefaults standardUserDefaults]; 
    //[saveHighScore setObject:scoreListNew forKey:@"DodgerAppBeta"];
    [saveHighScore synchronize];
    //[[NSUserDefaults standardUserDefaults] setObject:scoreListTestOne forKey:@"DodgerBeta"];
    //[[NSUserDefaults standardUserDefaults] synchronize];  
}

-(void)load
{

    saveHighScore = [NSUserDefaults standardUserDefaults];
    //scoreListNew  = [[saveHighScore objectForKey:@"DodgerAppBeta"] mutableCopy];

    printableScoreList  = [[saveHighScore objectForKey:@"DodgerAppBeta"] mutableCopy];
    //NSLog(@"scoreListTestOne %@", scoreListTestOne);
    //[printableScoreList addObject:[[NSUserDefaults standardUserDefaults] objectForKey:@"Dodger"]];
    NSLog(@"PSL %@", printableScoreList);
}
...