iOS 6で日本語変換中にロックするとクラッシュする問題

とりあえず発言をまとめました。。
17
sawat1203 / さわてぃ @sawat1203

@sawat1203 キーボード閉じてもダメで、キーボードの種類をEnglish (US) や絵文字に切り替えた後なら大丈夫。これだと、アプリ側の回避策なんて、無理やりダミーの「電話番号」指定テキストフィールドをファーストレスポンダにするとかしか無いんじゃないの?

2012-10-10 18:23:58
ONETOPI「iOSアプリ開発」 @iOSdev_1topi

この不具合は酷いですね。アプリのユーザから報告があっても、「iOSのバグです。英語キーボードに切り替えてからロックしてください」と答えるしかなさそうです :iOS 6に日本語入力に関係した深刻な不具合 | ひとりぶろぐ http://t.co/seFX1Hhc #1tp

2012-10-10 18:28:06
sawat1203 / さわてぃ @sawat1203

@setoh2000 いえ、詳しくはまだ見てません。メモアプリで試してて、入力完了しててもダメだとするとキーボードを隠すだけではやはりダメじゃないかと思って。

2012-10-10 18:40:27
setoh2000 @setoh2000

@sawat1203 私のアプリ、SmartEverはキーボード隠してませんが落ちません。あとFastEverなんかも。詳しくは検証できてませんがTask Completionで何かやってるといけるぽい気がします。。

2012-10-10 18:46:52
sawat1203 / さわてぃ @sawat1203

@setoh2000 なるほど。TaskCompletionがある場合とない場合でOS側の処理が違うのかもしれませんね。

2012-10-10 18:49:30
たろ @taro44291

@k_katsumi アプリ内にたくさんtextFieldやtextViewがある場合修正がたいへんなので、カレントViewControllerを得たり、カレントのfirstResponderを得る方法はありますか?

2012-10-10 18:50:00
sawat1203 / さわてぃ @sawat1203

@setoh2000 自分のアプリで試して見たところ、http://t.co/I4hcKLNB の resignFirstResponder なしのコードで落ちなくなりました。やはり、キーボードを隠すことよりTaskCompletionを使うことに意味がありそうです。

2012-10-10 18:56:09
setoh2000 @setoh2000

@sawat1203 dbのロック解除が若干遅れてるような感じですかね。とりあえず良かったです。

2012-10-10 19:05:29
sawat1203 / さわてぃ @sawat1203

あ、そうか。beginBackgroundTaskWithExpirationHandlerを呼んで、endBackgroundTaskを呼ぶまでの間に落ちないのはある意味当たり前か。これじゃ、10分後に復帰できるか確認しないと。

2012-10-10 19:07:53
setoh2000 @setoh2000

@k_katsumi @cqa02303 ユーザ辞書全部消してキーボードの変換学習リセットしたら落ちなくなったみたい。

2012-10-10 19:10:30
setoh2000 @setoh2000

@k_katsumi @cqa02303 と思ったけどまた落ち出した。すみません。

2012-10-10 19:14:37
sawat1203 / さわてぃ @sawat1203

@setoh2000 いや、すみません。あれだと10分延命できるだけでした…。resignFirstResponder を行う場合はまだ試せていません。

2012-10-10 19:23:18
setoh2000 @setoh2000

@sawat1203 なるほど…いやでも10分延命でいいのでは??違うかな。

2012-10-10 19:25:24
sawat1203 / さわてぃ @sawat1203

@setoh2000 ちょっとスリープしてすぐ戻ってくるならいいですけど、ほんとに「作業途中でなにか割り込み(来客とか)が入って一旦スリープモード」みたいなケースでは多分残念なことになりますね…。

2012-10-10 19:29:10
setoh2000 @setoh2000

@sawat1203 そういえばそうか。スリープだけなら10分以上もOKか。そういう意味では自分のアプリもダメかもorz

2012-10-10 19:33:18
sawat1203 / さわてぃ @sawat1203

んー。NSWindowにはfirstResponderを返すメソッドがあるけど、UIWindowにはないのか。

2012-10-10 19:33:49
sawat1203 / さわてぃ @sawat1203

やっぱり、textFieldをresignFirstResponderしてもendBackgroundTaskしたら落ちちゃうな。呼ばなきゃ10分後に強制終了…。

2012-10-10 20:06:24
moyashi @hitoriblog

「当座の現実的な回避策」を追記 "iOS 6に日本語入力に関係した深刻な不具合" http://t.co/Th7aTEm9

2012-10-10 20:09:34
sawat1203 / さわてぃ @sawat1203

んんー。スリープの場合だと、TaskCompletionがendBackgroundTaskを呼ばないまま10分経過しても強制終了はされないのか?ExpirationHandlerは呼ばれてる。

2012-10-10 20:40:37
sawat1203 / さわてぃ @sawat1203

確認するのに、いちいち10分待たないといけないのが辛い。

2012-10-10 20:41:13
Genji @genji_tw

@k_katsumi iPhone 4 & iOS 6.0 で検証したところ、バックグラウンドに回って 10 分後にクラッシュしました。endBackgroundTask: を呼ばないようにしたらクラッシュしなくなりました

2012-10-10 21:18:18
Genji @genji_tw

@k_katsumi それとキーボードを閉じるかどうかは関係ないと思います。endBackgroundTask: を呼ばない、かつテキストフィールドに resignFirstResponder を送らない場合でもクラッシュしませんでした

2012-10-10 21:23:58
Genji @genji_tw

@k_katsumi テキストフィールドに resignFirstResponder を送るボタン等を置いて、キーボードをユーザが明示的に閉じてからバックグラウンドに回す場合でもクラッシュするので、キーボードを閉じる処理は関係ないと思います

2012-10-10 21:28:38
Genji @genji_tw

iOS 6 の日本語入力後クラッシュ問題はロック画面への移行に限定するものではありません。ホームスクリーンへの移行や別アプリへのスウィッチでも、要するにアプリがバックグラウンドに回るときにクラッシュします

2012-10-10 21:32:26