Условно отключить фон для приложения iOS? - PullRequest
1 голос
/ 31 декабря 2010

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

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

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

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

1 Ответ

2 голосов
/ 01 января 2011

Использование exit() крайне нежелательно для Apple, согласно их Техническим вопросам и ответам QA1561 :

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

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

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

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

...