检查应用程序范围内的数据更改

时间:2011-09-13 14:50:06

标签: objective-c macos cocoa xcode4

我的应用程序有一系列文本字段,复选框和其他控件。理想情况下,我会要求用户在任何(或所有)控件上更改某些内容时保存信息。

有没有办法让这个更改行为应用程序范围?或者我需要为每个控件创建一个动作并在那里设置代码?

如果这有任何不同,我正在使用Xcode 4.

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

无论如何,您需要为每个控件编写代码(以处理用户更改)。

根据您的应用设置方式,您可能需要为每个可更改的属性编写其他代码。

我建议使用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,例如。

我建议不要“在任何(或所有)控件上更改某些内容时要求用户保存信息。”告诉用户他们是否希望保存自己的更改是很麻烦的......当然他们会这样做。如果您想让他们有机会退出,请改为提供“还原”或“重置”按钮。