Идентификация данных iCloud Key Value, не относящихся к приложению

Я подписываюсь на NSUbiquitousKeyValueStoreDidChangeExternallyNotification, чтобы отслеживать изменения значения ключа из iCloud. После получения я обрабатываю включенные userinfo и применяю свою бизнес-логику.

Однако иногда (особенно при первом запуске) я получаю ключи, которые кажутся связанными с системой или, по крайней мере, не являются частью моего приложения.

AppleKeyboards
NSInterfaceStyle
AppleKeyboardsExpanded
AppleICUForce24HourTimeAirPlayShouldShowDebugButtonInPicker

так далее

  1. Как я могу идентифицировать такие ключи и не пытаться использовать их в коде моего приложения? Должен ли я как-то «помечать» свои данные, чтобы их можно было идентифицировать?
  2. Несу ли я ответственность за обновление локальных значений этих ключей? iCloud должен отправлять их по какой-то причине, но я не знаю, куда их поместить. Они в моем NSUserDefaults? Или iCloud обрабатывает их отдельно (в этом случае кажется странным, что они включены в информацию о пользователе)?

Вот как я подписываюсь на уведомления:

[[NSNotificationCenter defaultCenter] addObserver:self                                                   selector:@selector(iCloudStoreChanged:)
                                             name:NSUbiquitousKeyValueStoreDidChangeExternallyNotification
                                           object:store];

person Ben Packard    schedule 16.06.2013    source источник
comment
1) какой именно вызов -[NSNotification addObserver:] вы используете? 2) вы используете какой-то странный фреймворк? 3) вы уверены, что не слушаете также NSUserDefaultsDidChangeNotification?   -  person Julien    schedule 17.06.2013
comment
Я добавил свой addObserver: - Я не использую никаких фреймворков и не слушаю NSUserDefaultsDidChangeNotification где-либо в своем коде.   -  person Ben Packard    schedule 17.06.2013
comment
Разве вы не знаете, какие ключи использует ваше приложение? Почему бы просто не поискать известные ключи?   -  person Tom Harrington    schedule 17.06.2013
comment
Кажется не очень надежным поддерживать список ключей, которые использует мое приложение, и мне нужно добавлять в этот список, когда я вношу изменения.   -  person Ben Packard    schedule 18.06.2013
comment
Если ключи, которых вы не ожидаете, здесь, значит, кто-то положил их туда. Возможно, вы используете какой-то внешний фреймворк, который пытался сохранить эти ключи. Попробуйте отладить приложение на устройстве и сломать его на -[NSUbiquitousKeyValueStore setObject:forKey:] и/или +[NSUbiquitousKeyValueStore defaultStore].   -  person Julien    schedule 22.06.2013


Ответы (1)


У Жюльена было это прямо здесь. Я не использовал никаких фреймворков, немного забыл, что раньше использовал MKiCloudSync для синхронизации своих NSUserDefaults. Я могу только предположить, что эти ключи добавлены системой в NSUserDefaults и переданы в iCloud.

person Ben Packard    schedule 22.06.2013