Почему второе значение (Null) при чтении данных из plist?

Эта проблема с веб-сайта makegameswith.us и их проекта Peeved Penguin. Я пытаюсь изменить его так, чтобы он считывал данные уровня из plist, а не из GameLayer.mm, первые данные спрайта считывают, как и ожидалось, второй проход цикла while возвращает (Null) для имени спрайта. Я посмотрел на список, оба спрайта должны иметь одинаковое имя файла "tallblock".

Вот соответствующий фрагмент кода:

CCLOG(@"About to load level data.");

    // Load Level Data and Draw Level Sprits
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Level1" ofType:@"plist"];
    NSDictionary *level = [NSDictionary dictionaryWithContentsOfFile:path];
    NSArray *levelBlocks = [level objectForKey:@"Blocks"]; // Capitalization matters

    NSEnumerator *enumerator = [levelBlocks objectEnumerator];
    id object;
    NSString *spriteName;
    NSString *spriteFile;
    NSNumber *xPos;
    NSNumber *yPos;

    // One of my sprite names is invalid...
    while (object = [enumerator nextObject])
    {
        spriteName = [object objectForKey: @"spriteName"];
        spriteFile = [spriteName stringByAppendingString:@".png"];

        CCLOG(@"Sprite File is : %@", spriteFile); // Second sprite doesn't load is null...
        sprite = [CCSprite spriteWithFile: spriteFile];
        xPos = [object objectForKey: @"x"];
        yPos = [object objectForKey: @"y"];
        sprite.position = CGPointMake([xPos floatValue], [yPos floatValue]);
        [blocks addObject:sprite];
        [self addChild: sprite
                     z: 7];
    }

    CCLOG(@"Finished Loading Level Data.");

Я поставил эту проблему на официальном форуме, но я не получил совет. Я много раз перебирал код в отладчике, и я не понимаю, почему он находит талблоки на первом проходе, а не на втором.

Я сделал скриншот файла plist. Есть идеи, почему код не работает на втором спрайте?

Снимок экрана Plist

2 ответа

Решение

В элементе spriteName элемента 1 отсутствует R...

Ваш второй элемент массива имеет ключ "spiteName", а не "spriteName"

Другие вопросы по тегам