12

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

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

如果可以的话,我想避免选择始终发送信息(无论是否更改)或首先从服务器获取信息并在与用户默认设置不同时进行更新。

有没有解决这个问题的好方法?感谢您的帮助!

一周后,没有答案……这个问题是不是太难了,还是根本没有任何意义?

4

3 回答 3

18

啊愚蠢的我!在这里,我们采用一种优雅的方式。在 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]
}

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

于 2011-04-02T21:08:32.770 回答
2

并不是这个问题太难了,只是没有一种简单的方法可以做你所问的。NSUserDefaults 没有记录每个应用程序设置的“最后修改”日期,至少据我所知,所以如果用户使用设置应用程序更改了某些设置,除了查看所有的设置。

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

于 2011-04-02T21:02:35.223 回答
0

迅速

观察变化并在变化时调用方法:

NotificationCenter.default.addObserver(
    self,
    selector: #selector(updateStateFromSettingsBundle),
    name: UserDefaults.didChangeNotification,
    object: nil
)
@objc func updateStateFromSettingsBundle() {}
于 2020-11-06T18:43:01.637 回答