【发布时间】:2011-03-30 06:13:46
【问题描述】:
我让用户在 iphone 的设置区域中更改他们的设置。在下一次网络同步期间,我想将用户更改发送到服务器。但前提是进行了更改。
但我如何知道用户何时在设置区域内进行了更改?
如果可以的话,我想避免选择始终发送信息(无论是否更改)或首先从服务器获取信息并在与用户默认设置不同时进行更新。
有没有解决这个问题的好方法? 感谢您的帮助!
一周后,没有答案... 这个问题是不是太难了,还是根本没有任何意义?
【问题讨论】:
我让用户在 iphone 的设置区域中更改他们的设置。在下一次网络同步期间,我想将用户更改发送到服务器。但前提是进行了更改。
但我如何知道用户何时在设置区域内进行了更改?
如果可以的话,我想避免选择始终发送信息(无论是否更改)或首先从服务器获取信息并在与用户默认设置不同时进行更新。
有没有解决这个问题的好方法? 感谢您的帮助!
一周后,没有答案... 这个问题是不是太难了,还是根本没有任何意义?
【问题讨论】:
啊,我太傻了!在这里,我们采用一种优雅的方式。在 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]
}
当应用程序第一次启动时,您必须将用户默认值作为字典保存到磁盘:您的默认值。然后,每次打开应用程序时,您都会比较这两个词典。如果他们
【讨论】:
这不是问题太难,只是没有一种简单的方法可以完成您的要求。 NSUserDefaults 没有记录每个应用程序设置的“最后修改”日期,至少据我所知,所以如果用户使用设置应用程序更改了某些设置,除了查看所有设置。
如果您确实需要这样做,我认为您最好的选择是读取您感兴趣的设置,以便同步到某个数据结构中并根据该结构计算某种哈希或校验和。将该值与您上次运行应用程序时计算的值进行比较,如果不同,则与服务器同步。如果需要,您可以将该值存储在 NSUserDefaults 中,但请确保不要将其包含在计算中。
【讨论】:
观察变化并在变化时调用方法:
NotificationCenter.default.addObserver(
self,
selector: #selector(updateStateFromSettingsBundle),
name: UserDefaults.didChangeNotification,
object: nil
)
@objc func updateStateFromSettingsBundle() {}
【讨论】: