Проблемы с загрузкой данных из Plist в массив - PullRequest
0 голосов
/ 06 января 2012

У меня странная проблема, которая, вероятно, имеет простое решение, которое я просто не могу найти / выяснить.Любые идеи приветствуются.

У меня есть список свойств, который состоит из массива в качестве корневого объекта.Массив содержит пару словарей.

Приведенный ниже код показывает, как я пытаюсь загрузить данные plist в мой массив -

-(void)awakeFromNib{

    NSString *plistPath = @"/Users/administrator/Desktop/WipeOut Winner!/Data.plist";
    NSLog(@"Plist path is %@",plistPath);


    if (![[NSFileManager defaultManager] fileExistsAtPath:plistPath]) {
            NSLog(@"File wasn't found");
    }


    tableDataArray = [[NSMutableArray alloc]initWithContentsOfFile:plistPath];

    NSLog(@"array count is %lu",[tableDataArray count]);   

}

А ниже находится файл plist -

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>root</key>
    <array>
        <dict>
            <key>winner</key>
            <string>Scott</string>
            <key>personChosen</key>
            <string>Female</string>
            <key>winType</key>
            <string>2 and &apos;Won&apos; -3 pts.</string>
            <key>Points</key>
            <string>3</string>
        </dict>
        <dict>
            <key>winner</key>
            <string>Emily</string>
            <key>personChosen</key>
            <string>Male</string>
            <key>winType</key>
            <string>All The Way! -5 pts.</string>
            <key>points</key>
            <string>5</string>
        </dict>
    </array>
</dict>
</plist>

Файл plist найден в порядке.И я подтвердил, что мой корневой объект в plist является массивом (словарей).Мой счетчик массивов после этого вызова всегда увеличивается до нуля.

Во время попытки выяснить это, я изменил данные в своем plist на один NSDictionary вместо массива, содержащего словари.Затем я загрузил plist в NSDictionary, загрузил этот словарь в массив, и число массивов равнялось 1, как и ожидалось, так что я точно знаю, что все правильно подключено, что касается поиска, загрузки и т. Д. Plist.В другом тесте, вместо того, чтобы пытаться загрузить массив с данными plist, как показано ниже:

tableDataArray = [[NSMutableArray alloc]initWithContentsOfFile:plistPath];

Я обошел все элементы plist вместе и просто загрузил массив, как это было так:и это также изменило число массивов к единице, как и ожидалось.Поэтому я думаю, что моя проблема связана с этим

tableDataArray = [[NSMutableArray alloc]initWithContentsOfFile:plistPath];

, но я не могу понять, где.

1 Ответ

1 голос
/ 06 января 2012

Корень вашего plist не является массивом.Это словарь с единственным ключом «корень», который указывает на массив словарей.Вместо этого ваш список должен выглядеть так:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <dict>
        <key>winner</key>
        <string>Scott</string>
        <key>personChosen</key>
        <string>Female</string>
        <key>winType</key>
        <string>2 and &apos;Won&apos; -3 pts.</string>
        <key>Points</key>
        <string>3</string>
    </dict>
    <dict>
        <key>winner</key>
        <string>Emily</string>
        <key>personChosen</key>
        <string>Male</string>
        <key>winType</key>
        <string>All The Way! -5 pts.</string>
        <key>points</key>
        <string>5</string>
    </dict>
</array>
</plist>
...