如何知道用户何时更改设置包

时间:2011-03-30 06:13:46

标签: iphone settings-bundle

我让用户在iphone的设置区域中更改其设置。在下一次网络同步期间,我想将用户更改发送到服务器。但只有做出改变。

但我如何知道用户何时在设置区域内进行了更改?

如果可以的话,我想避免选择始终发送信息,无论是否更改或首先从服务器获取信息,如果与用户默认值不同,则更新。

有解决此问题的优雅方式吗? 谢谢你的帮助!

一周后没有答案...... 这个问题太难了,还是没有任何意义呢?

3 个答案:

答案 0 :(得分:16)

啊傻傻的我!在这里,我们以优雅的方式前进。在XCode中的Apple文档中搜索AppPrefs,它将显示一个示例应用程序,它完全按照您的要求执行操作。只需编译并运行!它使用NSUserDefaultsDidChangeNotification

这是用于注册观察者的代码:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(defaultsChanged:)
                                             name:NSUserDefaultsDidChangeNotification
                                           object:nil];

旧回答:

看起来好像你可以从NSUserDefaults中获得修改日期。到目前为止,我只能这样想:

NSUserDefaults *previousDefaults = [someInstance previousUserDefaults];
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];

if([previousDefaults isEqualToDictionary:currentDefaults]) 
{
    [someOtherInstance sendModifiedUserDefaultsToServerWithDefaults:currentDefaults];
    [yetAnotherInstance saveModified]
}

首次启动应用程序时,您必须自己将用户默认值保存为字典到磁盘:默认值。然后,每次打开应用程序时,您都会比较这两个词典。如果他们

答案 1 :(得分:2)

这不是问题太难,只是没有一种简单的方法来做你所要求的。 NSUserDefaults不记录每个应用程序设置的“上次修改”日期,至少据我所知,所以如果用户使用“设置”应用程序更改某些设置,那么除了查看之外,还有一种不太好的方法来检测所有设置。

如果您确实需要这样做,我认为您最好的选择是阅读您有兴趣同步到某些数据结构并根据该结构计算某种散列或校验和的设置。将该值与您上次运行应用时计算的值进行比较,如果不同则与服务器同步。如果需要,可以将该值存储在NSUserDefaults中,但请确保不将其包含在计算中。

答案 2 :(得分:0)

迅速

观察更改并在更改时调用方法:

NotificationCenter.default.addObserver(
    self,
    selector: #selector(updateStateFromSettingsBundle),
    name: UserDefaults.didChangeNotification,
    object: nil
)
@objc func updateStateFromSettingsBundle() {}