2010-12-31 1 views
1

Я работаю с приложением, которое работает с данными, полученными с сервера. Логика выборки довольно устойчива и отказоустойчива; большинство ошибок подключения автоматически повторяются, что обычно отлично работает. Однако, учитывая очень редкую совокупность обстоятельств (которые включают состояние гонки, связанную с задержкой в ​​сети и базовую базу данных), приложение/сервер может попасть в непоследовательное состояние, из которого невозможно восстановить.Условно отключить фоновое изображение для приложения iOS?

Что бы я хотел сделать, это приложение, когда в этом состоянии просто прекращается в следующий раз, когда пользователь нажимает кнопку «домой» (вместо перехода на задний план). Приложение, при повторном запуске, будет повторно синхронизироваться с сервером, и пользователь пойдет по-своему.

Моя первая мысль - вызвать exit() из applicationDidEnterBackground, когда обнаружено несогласованное состояние. Есть ли у кого-нибудь опыт такого рода вещей или знать другой способ отключить фонирование на условной основе? Я понимаю, что это неодобрительно, кто-нибудь имеет опыт работы с Apple, явно отклоняющий приложение, обнаружив использование функции exit()? UIApplicationExitsOnSuspend = YES не является вариантом, поскольку многозадачность должна работать, как ожидалось, другой 99,999% времени.

Примечание: мои извинения за отсутствие специфики. Идеальное решение состоит в том, чтобы придумать способ оправиться от непоследовательного состояния; поверьте мне, когда я говорю много времени и усилий, чтобы понять, как это сделать.

ответ

2

Использование exit() сильно обескуражен Apple, за их Technical Q&A QA1561:

ПРЕДУПРЕЖДЕНИЕ: Можно выйти из приложения, вызвав выход. Приложения, вызывающие exit, будут отображаться пользователю, чтобы он разбился, а не , чем выполнение изящного завершения и оживление на главный экран. Такое использование дает отрицательный результат и сильно обескуражен.

Использование exit() должно появиться как авария, как отказ в утверждении. Если рецензент ударил это условие во время тестирования вашего приложения, вероятность того, что он будет отклонен.

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

Если вы можете определить эту несогласованность, я не понимаю, почему вы не смогли стереть все хранилища в памяти и эффективно начать все с нуля, как при новой загрузке приложения. У меня был редкий случай, когда моя база данных Core Data стала непоследовательна из-за цикла отмены/повтора/отмены, и это то, что я сделал, чтобы оправиться от этого.

+0

К сожалению, это не только данные на устройстве, но и комбинация данных на устройстве и сервере, который является виновником. Есть другие клиенты нашего бэкэнда, что делает изменение API сложным. Технический Q & A, который вы опубликовали, очень напоминает эхо HIG относительно использования функции exit(). Однако наш интересный случай, так как мы хотим использовать exit() после того, как пользователь нажал кнопку «домой» - они ожидают, что приложение закроется, и это произойдет. –

+1

@jenningj - Если несогласованность развивается как между клиентом, так и сервером, почему перезапуск приложения с нуля исправить проблему?Если перезапуск заставляет это уйти, кажется, что вы могли бы воспроизвести этот эффект в приложении, когда обнаружена несогласованность. Что касается выхода, несмотря на то, что приложение, похоже, выходит как обычно, я считаю, что журнал сбоев будет сгенерирован, что может поднять флаг с рецензентами. Опять же, они могут этого не заметить, поэтому вы можете играть в азартные игры и посмотреть, пройдет ли она. –