使用UISegmentedControl与NSUserDefaults一起保存mapKit首选项 - 无法正常工作

时间:2012-04-19 14:29:21

标签: objective-c ios nsuserdefaults uisegmentedcontrol

我有一个分段控件,有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;
    }

}

感谢您的帮助:))

2 个答案:

答案 0 :(得分:1)

我不知道你为什么这样做:

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

在IBAction中,您从(id)发件人处获得事件。

你为什么不放下:

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

也许我在错误的轨道上,但是您正在与分段控件的2个不同实例对象进行交谈。

这是什么?     segmentedControlMapType

与发件人相同?

答案 1 :(得分:1)

要检查,当modalView(pageCurl)被解除时,只需将委托方法添加到pageCurl控制器:

viewWillDisappear:

然后在那里添加地图更新逻辑。