无论如何,您都需要为每个控件编写代码(以处理用户更改)。
您可能需要为每个可变属性编写额外的代码,具体取决于您的应用设置方式。
我建议使用 NSNotificationCenter,并在您的数据属性之一发生更改时发送“某些更改”通知。
当你的控件被触摸时,你在一些数据存储对象上设置一个属性:
-(IBAction)grommetSwitchPress:(UISwitch*)sender
{
self.userData.wantsGrommets = sender.on;
}
该数据存储类将定义一个属性:
@interface UserData : NSObject
{
}
@property (nonatomic, assign) BOOL wantsGrommets;
使用自定义属性设置器来测试值是否已更改:
-(void)setWantsGrommets:(BOOL)wantsThem
{
if (wantsGrommets != wantsThem) // compares current property value with incoming
{
wantsGrommets = wantsThem;
[[NSNotificationCenter defaultCenter]
postNotificationName:NOTIFY_SOMETHING_CHANGED
object:self];
}
}
在某些标题中,您将定义通知消息:
#define NOTIFY_SOMETHING_CHANGED @"somethingChanged"
您可以决定将监听 NOTIFY_SOMETHING_CHANGED 的代码放在应用中的哪个位置,例如:
- (void)viewDidLoad:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(somethingChanged:)
name:NOTIFY_SOMETHING_CHANGED
object:nil];
}
例如,在 somethingChanged: 方法中,您可以将数据保存到 NSUserDefaults。
我建议不要“在任何(或所有)控件发生更改时要求用户保存信息”。询问用户是否希望保存自己的更改是一件很麻烦的事……他们当然会这样做。如果您想让他们有机会退出,请提供“还原”或“重置”按钮。