Доступ к строке из plist возвращает ноль

Вот код:

NSString* filepath = [[NSBundle mainBundle]
                      pathForResource:@"Stones" ofType:@"plist"];
NSDictionary *stones = [NSDictionary dictionaryWithContentsOfFile:filepath];
NSArray* array = stones[@"StoneArray"];
NSDictionary* dic = array[stoneInt];
NSString* string = [[NSString alloc] init];
string = dic[[NSString stringWithFormat:@"%d", stoneInt]];
return string;

stoneInt — это число от 0 до 59 (по умолчанию это 11).

Когда я устанавливаю точку останова на операторе return, stoneInt равно 11 (как и должно быть), а string равно nil. Что я делаю не так?

Кроме того, когда я анализирую dic, он правильно показывает, что работает с ключом 11 и строкой Maze.


Вот исходный код plist:

<plist version="1.0">
<dict>
    <key>StoneArray</key>
    <array>
        <dict>
            <key>1</key>
            <string>Ocean</string>
        </dict>
        <dict>
            <key>2</key>
            <string>Grass</string>
        </dict>

это продолжается до строки 59. Строка, которую я пытаюсь вернуть (в любом из этих случаев, давайте возьмем случай 1), - это «Океан». Мой объект string всегда nil.


person Anthony Shintoluggenprog    schedule 01.11.2016    source источник
comment
Почему вы используете stoneInt дважды двумя разными способами? Сначала вы используете его как индекс в array, который дает вам словарь. Затем вы преобразуете stoneInt в строку и используете ее в качестве ключа в словаре. Это кажется действительно странным.   -  person rmaddy    schedule 01.11.2016
comment
Я знаю, я получил ошибку изначально, когда у меня был только массив строк. Поэтому, когда вы создаете plist и видите Item 0, Item 1 и т. д., я использовал их как строки и написал NSString* string = array[[NSString stringWithFormat:@"%d", stoneInt]];   -  person Anthony Shintoluggenprog    schedule 01.11.2016
comment
В любом случае это все равно приводит к nil для строки   -  person Anthony Shintoluggenprog    schedule 01.11.2016
comment
Никто не может помочь, если вы не обновите свой вопрос со структурой вашего plist, показывающей значение, которое вы на самом деле пытаетесь получить.   -  person rmaddy    schedule 01.11.2016
comment
Мое редактирование вообще помогает?   -  person Anthony Shintoluggenprog    schedule 01.11.2016


Ответы (1)


Приношу свои извинения, оказалось, что значение stoneInt на самом деле было на единицу меньше, чем ключ, к которому я пытался получить доступ. stoneInt было 11, но ключ, к которому он обращался, был идентифицирован как 12.

person Anthony Shintoluggenprog    schedule 01.11.2016