Интересно, почему я получил зависание приложения при вызове [NSUbiquitouskeyValueStore синхронизации]
Иногда он останавливается через несколько минут назад, иногда я жду 10 минут, а затем принудительно прекращаю его. Когда я останавливаюсь и смотрю вызовы потоков, я вижу ловушку семафора из метода NSUbiquitouskeyValueStore _forceSynchronize.
2 ответа
Если вы работаете в симуляторе, выйдите из симулятора, создайте и снова запустите приложение.
Несколько вопросов:
- это в симуляторе, устройстве или в OS X?
- вы отлаживали при попытке отловить исключения? (или в более общем плане: вы проверяли, что исключений не было)?
- и наконец: можете ли вы опубликовать полный след от зависания?
Вот что заявляет Apple:
Класс NSUbiquitousKeyValueStore предоставляет программный интерфейс для хранения небольших объемов данных конфигурации в iCloud. Этот класс используется для синхронизации информации между экземплярами вашего приложения, работающими на разных устройствах, принадлежащих одному и тому же пользователю. Этот класс должен использоваться для обмена некритическими данными, такими как предпочтения, между экземплярами вашего приложения. Вы должны избегать его использования для хранения данных, которые являются центральными для поведения вашего приложения.
Этот класс предназначен для хранения только небольших объемов данных с использованием типов объектов списка свойств: NSNumber, NSString, NSDate, NSData, NSArray или NSDictionary. Вы можете использовать эти данные, чтобы создать более удобный для пользователя интерфейс. Например, приложение журнала, работающее на нескольких устройствах, может хранить информацию о том, какая редакция журнала читается и какую страницу читает пользователь. Не используйте хранилище значений ключей для хранения общих данных приложения или данных, которые требуют частых обновлений. Общий объем доступного пространства в хранилище значений ключей вашего приложения ограничен 1 МБ. (Существует также ограничение для каждого ключа, которое в настоящее время установлено в 1 МБ, и максимально 1024 ключа разрешены.) Если вы попытаетесь записать данные, которые превышают эти квоты, попытки записи завершатся неудачно, и старые значения (если любой) останется на месте.