Попытка вызова данных PList в цикле for (iOS) - PullRequest
0 голосов
/ 21 ноября 2011

У меня есть, на мой взгляд, простой вопрос с простым ответом, который я не могу понять для своей жизни.Я создал список, который я пытаюсь использовать, чтобы заполнить аннотацию MapView информацией.Я прошел некоторые уроки, и это код, который я решил использовать (запустив цикл).

Он не отображал булавки на карте, поэтому я решил настроить NSLogs на разныхуказывайте на весь код, чтобы найти проблему, и если вы посмотрите на код, приведенный ниже, он выходит из системы «read1», но не «read2», так что на самом деле это проблема где-то в начале цикла.Время от времени у меня появляются простые синтаксические ошибки, поэтому я думаю, что это может быть что-то в этом роде.Спасибо за помощь!

-

РЕДАКТИРОВАТЬ

Вот часть кода XML моего файла 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>Title</key>
            <string>Neighborhood Market #90</string>
            <key>Address</key>
            <string>5117 Mudd Tavern Rd., Thornburg, VA 22580</string>
            <key>Latitude</key>
            <real>38.133069</real>
            <key>Longitude</key>
            <real>-77.512423</real>
            <key>Phone Number</key>
            <string>(757) 874-5806</string>
        </dict>
        <dict>
            <key>Title</key>
            <string>Neighborhood Market #89</string>
            <key>Address</key>
            <string>4902 Hampton Blvd., Norfolk, VA 23508</string>
            <key>Latitude</key>
            <real>36.887794</real>
            <key>Longitude</key>
            <real>-76.302544</real>
            <key>Phone Number</key>
            <string>(757) 440-7792</string>
        </dict>
        <dict>
            <key>Title</key>
            <string>Neighborhood Market #88</string>
            <key>Address</key>
            <string>7601 Sunset Crossing Dr., Gainesville, VA 20155</string>
            <key>Latitude</key>
                <real>38.792053</real>
            <key>Longitude</key>
            <real>-77.62994399999999</real>
            <key>Phone Number</key>
            <string>(571) 248-8580</string>
        </dict>

Ответы [ 2 ]

2 голосов
/ 21 ноября 2011

На самом деле plist содержит словарь на верхнем уровне с одним ключом "Root", значением которого является интересующий вас массив. Поэтому вы должны прочитать файл в NSDictionary и затем извлечь массив внутри него. .

Заменить эту строку:

NSMutableArray *anns = [[NSMutableArray alloc] initWithContentsOfFile:path];

с этими:

NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];
NSArray *anns = [dict objectForKey:@"Root"];
1 голос
/ 21 ноября 2011

Какое значение anns? Я догадываюсь, что это nil, и поэтому твой цикл никогда не запускается. Замените «read1» на:

NSLog(@"anns is: %@", anns);

и посмотри, что получишь.

Кроме того, почему бы не использовать быстрое перечисление для этого?

for(NSDictionary *annotation in anns){
  //...
}

чище, более лаконичен и гарантированно будет таким же быстрым или быстрым, как цикл for, основанный на итерациях.

...