【发布时间】:2015-08-07 20:06:18
【问题描述】:
我的应用中有两个视图和一个用于存储一些值的 plist 文件。
在第一个视图中,我创建了一个名为 frequenciesButton 的按钮,用于打开第二个视图和另一个用于恢复默认值的按钮。
在第二个视图中,有一个 pickerView 和一个“完成”按钮。
在第一个视图的 .m 上:
- (void)viewDidLoad {
[super viewDidLoad];
//
self.gameSettings = [[NSMutableDictionary alloc] initWithContentsOfFile:gameSettingsFilePath];
}
-(void)viewWillAppear:(BOOL)animated {
[self refreshView];
}
- (void)refreshView {
[self.frequenciesButton setTitle:[NSString stringWithFormat:@"%@ hz and %@ hz", [self.gameSettings objectForKey:@"freq-freq1"], [self.gameSettings objectForKey:@"freq-freq2"]] forState:UIControlStateNormal];
...
}
- (IBAction)setDefaultValues:(UIButton *)sender {
[self.gameSettings setValue:@880 forKey:@"freq-freq1"];
[self.gameSettings setValue:@1122 forKey:@"freq-freq2"];
...
[self.gameSettings writeToFile:gameSettingsFilePath atomically:YES];
[self refreshView];
}
加载第一个视图时,按钮标题更改为存储在gameSettings 字典中的默认值。 setTitle: 方法有效。
当我点击frequenciesButton 时,它会打开带有pickerView 的第二个视图,我为freq-freq1 和freq-freq2 选择了两个新值,并在完成按钮上保存到plist 文件中。
问题是frequenciesButton标题在第二个视图被解散并出现第一个视图时没有改变。调用了refreshView 方法,但按钮setTitle: 不起作用。
在这种情况下,如果我返回一个屏幕并返回此视图,按钮标题会更新。
当我点击defaultValuesButton 时,frequenciesButton 的标题会发生变化。方法setTitle:也可以。
对必须发生的事情有什么想法吗?
【问题讨论】:
-
添加日志查看
self.frequenciesButton是否为nil。 -
我在
refreshView方法中放置了一个NSLog,在setTitle之前和之后尝试过,它总是返回一个 UIButton。日志:<UIButton: 0x7ae9fc60; frame = (244 85; 180 30); opaque = NO; autoresize = LM+RM+BM; layer = <CALayer: 0x7ae9fd80>> -
我使用与我的应用程序相同的逻辑制作了一个小型测试项目:link。我也有同样的行为。
标签: ios objective-c xcode uibutton