Сбой приложения iPhone при повороте устройства во время отображения клавиатуры - PullRequest
2 голосов
/ 03 мая 2011

У меня есть приложение для iPhone с веб-просмотром, которое в какой-то момент перенаправляет на форум.

Я заметил, что приложение произойдет сбой, когда я сделаю эти шаги:

1) Просмотр по форуму (vBulletin)
2) Откройте ветку и попробуйте опубликовать сообщение
3) Нажмите на текстовую область, чтобы появилась клавиатура 4) Затем быстро наберите и / или поверните устройство

Теперь мое приложение для iPhone падает. Обратите внимание: сбой появляется только в очень длинных потоках, поэтому это должно быть проблема с памятью или процессором?

В любом случае, я не могу понять, где искать проблему, потому что XCode 4 не показывает никаких журналов для аварии! Во-вторых, при запуске приложения через Xcode (на устройстве) оно вылетает без каких-либо ошибок ... Сбой не воспроизводится с помощью симулятора (конечно).

Как решить такую ​​проблему?


CONSOLE:

May 10 00:23:36 unknown SpringBoard[29] <Warning>: Received memory warning. Level=1
May 10 00:23:36 unknown MobilePhone[582] <Warning>: Received memory warning. Level=1
May 10 00:23:37 unknown configd[25] <Notice>: jetsam: kernel memory event (91), free: 1198, active: 7537, inactive: 3482, purgeable: 0, wired: 17615
May 10 00:23:37 unknown SpringBoard[29] <Warning>: Received memory warning. Level=2
May 10 00:23:37 unknown MobilePhone[582] <Warning>: Received memory warning. Level=2
May 10 00:23:38 unknown configd[25] <Notice>: jetsam: kernel termination snapshot being created
May 10 00:23:38 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:com.apple.mobilephone[0xa185]) Exited: Killed: 9
May 10 00:23:38 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:com.skype.skype[0xf18]) Exited: Killed: 9
May 10 00:23:38 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:com.myCompanygmbh.myTestApp[0x9c47]) Bug: launchd_core_logic.c:3795 (24506):0
May 10 00:23:39 unknown com.apple.debugserver-50[598] <Warning>: 1 [0256/1503]: error: ::read ( 4, 0x2ffb19f0, 1024 ) => -1 err = Bad file descriptor (0x00000009)
May 10 00:23:39 unknown SpringBoard[29] <Warning>: Application 'Phone' exited abnormally with signal 9: Killed: 9
May 10 00:23:39 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:com.myCompanygmbh.myTestApp[0x9c47]) Bug: launchd_core_logic.c:3794 (24506):3
May 10 00:23:39 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:com.myCompanygmbh.myTestApp[0x9c47]) Bug: launchd_core_logic.c:3202 (24506):10
May 10 00:23:39 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:com.myCompanygmbh.myTestApp[0x9c47]) Working around 5020256. Assuming the job crashed.
May 10 00:23:39 unknown com.apple.launchd[1] <Warning>: (UIKitApplication:com.myCompanygmbh.myTestApp[0x9c47]) Job appears to have crashed: Segmentation fault: 11
May 10 00:23:39 unknown SpringBoard[29] <Warning>: Application 'Skype' exited abnormally with signal 9: Killed: 9
May 10 00:23:39 unknown SpringBoard[29] <Warning>: Application 'myTestApp' exited abnormally with signal 11: Segmentation fault: 11
May 10 00:23:40 unknown kernel[0] <Debug>: launchd[606] Builtin profile: container (sandbox)
May 10 00:23:40 unknown kernel[0] <Debug>: launchd[606] Container: /private/var/mobile/Applications/1D182D9C-6475-4B81-B409-E6245C60FE84 [69] (sandbox)
May 10 00:23:40 unknown ReportCrash[604] <Error>: Saved crashreport to /Library/Logs/CrashReporter/LowMemory-2011-05-10-002340.plist using uid: 0 gid: 0, synthetic_euid: 0 egid: 0
May 10 00:23:41 unknown Skype[606] <Warning>: ===== Starting HellKit (10021/3.0.0.250/IPHONE) =====
May 10 00:23:41 unknown Skype[606] <Warning>: Running on iOS device model iPhone3,1 (sysctlbyname('hw.machine'))
May 10 00:23:41 unknown Skype[606] <Warning>: Video capture constraints: 12 FPS, complexity mode 8
May 10 00:23:42 unknown MobilePhone[605] <Warning>: UI Mode is Phone
May 10 00:23:43 unknown SpringBoard[29] <Debug>: spd:___libspd_initialize_notify_block_invoke_1:214 spd woke up!
May 10 00:23:43 unknown SpringBoard[29] <Debug>: spd:_libspd_initialize_protocol:142 Registered notification port with spd [PID=609]
May 10 00:23:43 unknown SpringBoard[29] <Debug>: spd:spd_notification_socket_activity:279 Calling session client's callback on their queue for client [PID=606]
May 10 00:23:44 unknown sandboxd[610] <Notice>: Skype(606) deny file-write-create /Applications/.dat025e.000
May 10 00:23:44 unknown mediaserverd[19] <Warning>: 00:23:44.479 <SystemSoundServer> WARNING translating CMSession error: -12985 
May 10 00:23:44 unknown mediaserverd[19] <Warning>: 00:23:44.530 <SystemSoundServer> WARNING translating CMSession error: -12985 
May 10 00:23:44 unknown spd[609] <Error>: spd:spd_vet_socket:658 getpeername failure for client socket [FD=5]: Socket is not connected
May 10 00:23:44 unknown spd[609] <Error>: spd:spd_checkin_socket:954 Unable to check-in unsupported socket for client [PID=606]
May 10 00:23:44 unknown mediaserverd[19] <Error>: 00:23:44.585 <AudioQueueServer> AudioQueue: Error -12985 from AudioSessionSetClientPlayState(606)
May 10 00:23:45 unknown spd[609] <Error>: spd:spd_vet_socket:658 getpeername failure for client socket [FD=6]: Socket is not connected
May 10 00:23:45 unknown spd[609] <Error>: spd:spd_checkin_socket:954 Unable to check-in unsupported socket for client [PID=606]

1 Ответ

2 голосов
/ 04 мая 2011

Однажды у меня была похожая проблема, и вот возможное решение ...

Во-первых, это скорее всего проблема с памятью, а не с использованием процессора, поэтому убедитесь, что вы реализовали метод делегата - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application в делегате приложения ... поместите туда строку журнала.

Во-вторых, эмулируйте предупреждение о нехватке памяти (у симулятора есть эта опция в аппаратном меню)

Теперь посмотрите, не падает ли ваше приложение при переходе от потока к потоку (я подозреваю, что это произойдет).

Если произойдет сбой, то в отладчике просмотрите ваши ивары, где он падает (особенно те, которые соответствуют компонентам пользовательского интерфейса и загружаются из xib). Убедитесь, что они ссылаются на то, на что они должны ссылаться: когда ваше приложение получит предупреждение о нехватке памяти, iOS автоматически выгружает ресурсы xib скрытых представлений, и если вы удерживаете / зависите от любого из них где-то в вашем коде, вероятно, что приложение будет аварийно завершено, если эти ivars не соответствуют ожиданиям вашего кода.

И последняя рекомендация: при следующем сбое обязательно включите трассировку стека. Если у вас нет приложения, работающего в режиме отладки, вы все равно можете получить трассировку стека с помощью «Утилиты конфигурации iPhone», которая может считывать вывод консоли вашего устройства

...