【发布时间】:2013-06-12 20:57:41
【问题描述】:
我订阅NSUbiquitousKeyValueStoreDidChangeExternallyNotification 来监控来自 iCloud 的键值变化。收到后,我会处理包含的 userinfo 并应用我的业务逻辑。
但是,有时(尤其是在首次启动时)我收到的密钥似乎与系统相关,或者至少不是我的应用程序的一部分 -
AppleKeyboards
NSInterfaceStyle
AppleKeyboardsExpanded
AppleICUForce24HourTimeAirPlayShouldShowDebugButtonInPicker
等
- 如何识别此类密钥并避免尝试针对我的应用程序代码运行它们?我是否应该以某种方式“标记”我自己的数据以便识别它们?
- 我是否负责更新这些键的本地值? iCloud 发送它们一定是有原因的,但我不知道把它们放在哪里。它们在我的 NSUserDefaults 中吗?还是 iCloud 单独处理它们(在这种情况下,用户信息中包含它们似乎很奇怪)?
这就是我订阅通知的方式:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(iCloudStoreChanged:)
name:NSUbiquitousKeyValueStoreDidChangeExternallyNotification
object:store];
【问题讨论】:
-
1) 您正在使用的 -[NSNotification addObserver:] 调用到底是什么? 2)你在使用一些奇怪的框架吗? 3) 你确定你没有在听 NSUserDefaultsDidChangeNotification 吗?
-
我添加了我的 addObserver: - 我没有使用任何框架,也没有在我的代码中的任何地方监听 NSUserDefaultsDidChangeNotification。
-
您不知道您的应用使用哪些键吗?为什么不只查找已知键?
-
维护我的应用使用的键列表似乎不太可靠,并且在我进行更改时必须添加到此列表中。
-
如果您不期望的钥匙在这里,有人把它们放在那里。也许您正在使用一些试图保存这些密钥的外部框架。尝试在设备上调试您的应用程序并在
-[NSUbiquitousKeyValueStore setObject:forKey:]和/或+[NSUbiquitousKeyValueStore defaultStore]上中断
标签: iphone ios cocoa-touch icloud nsubiquitouskeyvaluestore