Приложение вылетает при быстром выходе + перезапуск - PullRequest
3 голосов
/ 28 октября 2009

Я работаю с бесплатным приложением, которое вычисляет оценки для норвежских школьников. Различные предметы хранятся в базе данных sqlite. Все работает хорошо, за исключением одного: если я закрою приложение и перезапущу быстро (быстрее, скажем, за одну секунду), оно вылетает. Кроме того, это происходит только в том случае, если я закрываю приложение при определенных обстоятельствах, связанных с выбором / проверкой объектов в UITableView (изменения немедленно сохраняются в базе данных). В любом случае, если я подожду более одной секунды, прежде чем перезапускать приложение, оно никогда не выйдет из строя.

Ошибка не отслеживается в окне консоли.

Приборы обнаружили утечки памяти в моем приложении, но они очень маленькие (16 байт). Я предполагаю, что это не причина аварии (но я постараюсь остановить утечки). Я также попытался удалить и переустановить приложение, а также включить и выключить iPod / iPhone. Без изменений ...

Я понимаю, что не могу никого попросить найти ошибку в обширном коде моего приложения. Мои вопросы к вам, ребята:

  1. Кто-нибудь из вас сталкивался с подобными ошибками? Связанные с sqlite?
  2. Как вы думаете, App Store отклонит приложение из-за этого?
  3. Кто-нибудь знает, с чего начать поиск ошибки?

Я очень благодарен за любой ответ!

1 Ответ

2 голосов
/ 28 октября 2009

Когда вы говорите «он падает», какую ошибку вы получаете в стеке телефона? Это фактический сбой, или вы получаете сообщение об ошибке «Ошибка запуска при ошибке?»

На iPhone возможна остановка основного потока приложения при одновременном запуске фоновых неотключенных потоков. В этом смысле, несмотря на все утверждения, что вы не можете работать в фоновом режиме, вы на самом деле можете ... в течение нескольких секунд. Когда основной поток завершается, вы возвращаетесь к Springboard, и в конечном итоге ОС убивает ваш процесс, если он не завершается самостоятельно. Управляешь ли ты какой-нибудь своей работой sqlite в фоновом потоке? Создаете ли вы какие-либо незадействованные потоки (обычно для этого требуются pthreads, поэтому, если вы не знаете, вероятно, нет, но sqlite может; проверьте инструменты).

Вполне возможно, что ваш последний экземпляр все еще имеет блокировку вашей базы данных и что ваш перезапуск плохо реагирует на эту блокировку. У вас есть правильная обработка ошибок вокруг вашего открытия?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...