跨多个视图管理内存

时间:2012-02-07 18:44:34

标签: iphone objective-c ios xcode4 ios5

我正在构建一个具有主视图的应用程序,该视图由地图视图组成。第二个视图有一些必要的配置选项(配置视图)。我使用部分curl segue来查看此配置视图。

我遇到的问题是我的配置视图状态没有得到维护。

例如,

我将进入配置视图,对设置进行一些更改并返回主Map视图。一旦我再次返回配置视图,值就会恢复为默认值。有问题的值是 distanceFilterValue

这是我的配置视图控制器的实现:

@interface SimpleConfigViewController()
//private interface inside implementation
@property (weak, nonatomic) UISlider * distanceFilterSlider;
@property (strong, nonatomic) NSNumber *distanceFilterValue;
@end

@implementation SimpleConfigViewController

@synthesize distanceFilterLabel = _distanceFilterLabel;
@synthesize distanceFilterSlider = _distanceFilterSlider;
@synthesize distanceFilterValue = _distanceFilterValue;

- (NSNumber *)distanceFilterValue {
    if (!_distanceFilterValue) {
        _distanceFilterValue = [NSNumber numberWithFloat:250.0];
    }
    return _distanceFilterValue;
}

- (IBAction)distanceSliderValueChanged:(UISlider *)sender {
    self.distanceFilterValue = [NSNumber numberWithFloat:sender.value];
    //update GUI
    self.distanceFilterLabel.text = [NSString stringWithFormat:@"%.f m", sender.value];
}


@end

在我看来,因为我保留了一个指向distanceFilterValue的强指针,当我返回到配置视图时,这个值应该是正确的。我在这里显然遗漏了一些东西。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我可能错了,但我猜配置视图已卸载,并在第二次推送时再次从XIB加载。

您应该将值存储在模型对象中,而不是存储在控制器中!

答案 1 :(得分:0)

我认为Erik是对的,每次为configView调用viewDidLoad时它都会重置。您可以使用Singleton或NSUserDefaults来解决此问题。