Широта долготы от plist до CLLocation

#iphone #xcode

#iPhone #xcode

Вопрос:

У меня есть следующий список:

     <plist version="1.0">
<array>
    <dict>
        <key>description</key>
        <string>Dodge Viper</string>
        <key>title</key>
        <string>Bil</string>
        <key>longitude</key>
        <real>19.027054</real>
        <key>latitude</key>
        <real>36.129471</real>
        <key>show</key>
        <true/>
    </dict>
    <dict>
        <key>description</key>
        <string>Dodge RAM</string>
        <key>title</key>
        <string>Truck</string>
        <key>longitude</key>
        <real>1.026062</real>
        <key>latitude</key>
        <real>46.128918</real>
        <key>show</key>
        <true/>
    </dict>
    <dict>
        <key>description</key>
        <string>Tøf tøf</string>
        <key>title</key>
        <string>Lastbil</string>
        <key>longitude</key>
        <integer>0</integer>
        <key>latitude</key>
        <real>56.128918</real>
        <key>show</key>
        <true/>
    </dict>
    <dict>
        <key>description</key>
        <string>Black Pearl</string>
        <key>title</key>
        <string>Piratskib</string>
        <key>longitude</key>
        <integer>0</integer>
        <key>latitude</key>
        <real>25.128918</real>
        <key>show</key>
        <false/>
    </dict>
</array>
</plist>
  

И у меня есть базовый контроллер mapview.

Я хотел бы создать аннотации для каждого элемента, используя клавишу долготы и высоты.

Проблема в том, что когда я пытаюсь, у меня возникают проблемы с «double» -> Я не знаю, как прочитать мое значение из списка как double, я попытался преобразовать его, но, похоже, это не работает.

Мой код в контроллере представления карты выглядит следующим образом:

В настоящее время существует проблема с «double latitude2 = [str objectForKey:@»latitude»];» но я все равно включил строку, чтобы показать свои намерения.

 -(void)viewDidLoad {
    [super viewDidLoad];



    NSString *path = [[NSBundle mainBundle] pathForResource:
                      @"enheder" ofType:@"plist"];

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

    for (NSString *str in array2) {

        double latitude2 = [str objectForKey:@"latitude"];


    [mapview setMapType:MKMapTypeHybrid];
    [mapview setZoomEnabled:YES];
    [mapview setScrollEnabled:YES];

    MKCoordinateRegion region = { {0.0, 0.0 }, {0.0, 0.0 } };
    region.center.latitude = latitude2;
    region.center.longitude = 9.027044;
    region.span.longitudeDelta = 0.001f;
    region.span.latitudeDelta = 0.001f;
    [mapview setRegion:region animated:YES];

    NewClass *ann = [[NewClass alloc] init];
    ann.title = @"Title";
    ann.subtitle = @"Sub";
    ann.coordinate = region.center;
    [mapview addAnnotation:ann];

   }  




}
  

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

Ответ №1:

Ваш plist содержит массив словаря, а не массив строк. измените свой код таким образом

 for (NSDictionary *dict in array2) 
    double latitude2 = [[dict objectForKey:@"latitude"] doubleValue];
  

Ответ №2:

 for (NSString *str in array2) { 
  

в этом утверждении NSString заменить на NSDictionary я думаю, что это сработает

Комментарии:

1. Да, plist — это массив словарей, а не массив строк.