Использование UISegmentedControl для сохранения настроек mapKit с помощью NSUserDefaults - работает некорректно

У меня есть сегментированный элемент управления с 3 вариантами сохранения стандартных / спутниковых / гибридных карт в NSUserDefaults. Одна из моих проблем заключается в том, что сегментированный элемент управления возвращается к первому сегменту при повторном посещении mapSettingsViewController. Другая проблема заключается в том, что mapViewController не перезагружается на viewWillAppear.

Я использую модальный переход pageCurl с раскадровкой - не уверен, что это имеет значение.

это код в контроллере представления настроек (mapSettingsViewController) для сохранения сегментированного выбора:

    - (IBAction)changeMapType: (id)sender{


    NSInteger index = ((UISegmentedControl*)sender).selectedSegmentIndex;

    // Get the shared defaults object.
    NSUserDefaults *mapUserPreferences = [NSUserDefaults standardUserDefaults];

    if(segmentedControlMapType.selectedSegmentIndex == 0){
        // Save the index.
    [mapUserPreferences setInteger:index forKey:@"mapViewKey"];

    }
    else if(segmentedControlMapType.selectedSegmentIndex == 1){
        // Save the index.
        [mapUserPreferences setInteger:index forKey:@"mapViewKey"];
    }
    else if(segmentedControlMapType.selectedSegmentIndex == 2){
        // Save the index.
        [mapUserPreferences setInteger:index forKey:@"mapViewKey"];

    }

    // Write them to disk
    [mapUserPreferences synchronize];
}

затем в первом контроллере представления (mapViewController) для отображения изменения базы карты, на которой сегмент был выбран пользователем. Я поместил код в viewWillAppear, чтобы карта перезагружалась каждый раз при появлении представления.

    -(void) viewWillAppear:(BOOL)animated {

    // Get the settings and set the selected index.
    NSUserDefaults *mapUserPreferences = [NSUserDefaults standardUserDefaults];
    if([mapUserPreferences integerForKey:@"mapViewKey"] == 0) {
        mapView.mapType = MKMapTypeStandard;
    }
    if([mapUserPreferences integerForKey:@"mapViewKey"] == 1) {
        mapView.mapType = MKMapTypeSatellite;
    }
    if([mapUserPreferences integerForKey:@"mapViewKey"] == 2) {
        mapView.mapType = MKMapTypeHybrid;
    }

}

спасибо за любую помощь :)


person hanumanDev    schedule 19.04.2012    source источник
comment
Я изменил в IB сегментированный элемент управления, чтобы он не был выбран, и он работает. однако карта по-прежнему не загружается в viewWillAppear в mapViewController. Вы должны покинуть представление, затем вернуться, а затем оно загрузится. Мне интересно, связан ли переход загиба страницы с тем, что viewWillAppear не перезагружает карту ...   -  person hanumanDev    schedule 19.04.2012


Ответы (2)


Чтобы проверить, отклоняется ли modalView (pageCurl), просто добавьте метод делегата в свой pageCurl Controller:

viewWillDisappear:

Затем добавьте туда логику обновления карты.

person Fab1n    schedule 19.04.2012
comment
Я уверен, что это способ сделать это. Мне просто нужно исследовать, как это делается ... еще раз спасибо - person hanumanDev; 19.04.2012

Я не знаю, зачем ты это делаешь:

if(segmentedControlMapType.selectedSegmentIndex == 0){
// Save the index.
[mapUserPreferences setInteger:index forKey:@"mapViewKey"];

в IBAction вы получаете событие от отправителя (id).

почему бы вам просто не поставить:

if((UISegmentedControl*)sender.selectedSegmentIndex == 0)

Возможно, я ошибаюсь, но вы говорите с двумя разными объектами экземпляра сегментированного элемента управления.

что это? segmentedControlMapType

такой же, как отправитель?

person Fab1n    schedule 19.04.2012
comment
хорошо спасибо. есть идеи, как заставить mapViewController перезагружаться при повторном посещении после того, как сегментированный параметр изменен в mapSettingsViewController? Думал, будет viewWillAppear. - person hanumanDev; 19.04.2012
comment
Да, они. Я проверил: NSLog (@% @, [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]); Я использую переход загиба страницы в раскадровке. Если я вернусь к mapViewController из mapSettingsViewController (загиб страницы), карта не изменится. Если я выйду из представления mapViewController, а затем вернусь, карта будет изменена правильно. - person hanumanDev; 19.04.2012
comment
потому что viewWillAppear не будет вызываться. Просто действуйте так, как я написал в сообщении ниже - person Fab1n; 19.04.2012