2010年2月9日火曜日

マギノート ver 1.1.0の不具合に関しまして(続)

現在、マギノート ver 1.1.0 には下記の不具合が見つかっております。
  1. メモの入力中にiPhone本体を傾けるとキーボードが勝手に閉じてしまう。
  2. メモを入力しようとしても開いたキーボードがすぐに閉じてしまい入力できない場合がある。
  3. 横画面での使用時にコピー・ペーストの範囲選択ができない場合がある。
各不具合の対応状況・回避方法を以下に記述します。
  1. メモの入力中にiPhone本体を傾けるとキーボードが勝手に閉じてしまう。

    この不具合は ver 1.1.1 で修正済です。ver 1.1.0 をご利用の方は ver 1.1.1(以降)へのアップデートをお願いします。

  2. メモを入力しようとしても開いたキーボードがすぐに閉じてしまい入力できない場合がある。

    この不具合は ver 1.1.2 で対策済です。ver 1.1.2 は現在アップルの審査中です。リリースまで今少しお待ちください。

    なお、この不具合は iPhone本体の傾き(方向)を変えた直後(概ね1秒以内)にメモの入力を開始した場合にのみ発生します。例えば、机の上に置いてある iPhoneを取り上げて(手前に起こして)すぐにメモの行をタップした場合、などです。
    # この不具合の原因は iPhone SDK自体のバグにあるようです(後述)。

    従いまして、
    • iPhoneを動かした(傾きを変えた)場合は、一呼吸(1秒程度)待ってからメモの入力を開始する
    という方法で回避可能です。

    ご迷惑をおかけしますが、対策版がリリースされるまでは、上記回避方法をお試しいただくようお願いします。

  3. 横画面での使用時にコピー・ペーストの範囲選択ができない場合がある。

    この不具合は、iPhoneを反時計回りに回転した横画面(ホームボタンが右側にくる持ち方)での使用時にのみ発生します。

    縦画面はもちろん、時計回りに回転した横画面(ホームボタンが左側にくる持ち方)の場合には発生しません。

    この不具合は、iPhone OS 2.2.1対応のアプリを iPhone OS 3.0以降で使用した場合に発生する iPhone OSの非互換性に起因する不具合です。そのため、アプリ側での対策は非常に難しく、現状、効果的な対策が見つかっていません。
    # もっとも簡単な対策は、iPhone OS 2.2.1のサポートを止めてしまう事ですが・・・。

    申し訳ありませんが、この件に関しましては現状での制限事項とさせていただきます。ご迷惑をおかけしますが、ご理解のほどお願いします。

    なお、前述の通り、この不具合は反時計回りの横画面(ホームボタンが右側)でのみ発生します。従いまして、当面の間
    • 横画面でコピー・ペーストを使用される場合は時計回りの横画面(ホームボタンが左側)を使用する
    方法での回避をお願いします。


マギノートについて詳しくは、こちらの記事をご参照ください。


閑話休題

以下、備忘録的(いいわけともいう ^^;)書き込みです。プログラミング的な内容になりますので、興味の無い方は読み飛ばしてください。

さて、まず第1の不具合の原因ですが、これは完璧にプログラムミスです。いいわけのしようも無い(^^;)。

iPhoneの方向(縦横)が変わると、全文表示に必要な行の高さも変わるため、方向の変化を検知すると[tableView reloadData]を実行して、テーブルビューの再描画をやってるんですが、キーボードが表示された状態でこれをやるとキーボードが閉じてしまいます。

なので、キーボードが表示された状態では[tableView reloadData]しないような制御が必要なんですが、これを忘れていたという(^^;)。

で、この部分を修正したのが、ver 1.1.1なんですが、それでも第2の不具合が解消しなかった原因は、上の方にも少し書いた通り、iPhone SDKの(おそらく)バグにあります。
# もしかしたら「仕様」かもしれませんが(^^;)。

キーボードが表示されているかどうかを判定するのに、UIKeyboardDidShowNotification、UIKeyboardDidHideNotificationを使用しているんですが、なんということか、デバイスの回転とキーボードの表示がほぼ同時に発生すると、UIKeyboardDidShowNotificationが発生しません。UIDeviceOrientationDidChangeNotificationのみ発生します。

おかげで、アプリ側ではキーボードが表示されていないと判断してしまい(実際には表示されているのに)、[tableView reloadData]を実行してしまうという・・・(^^;)。

対策として、Notificationの代わりに、textViewDidBeginEditing、textViewDidEndEditingを使用してキーボードの表示有無(=textViewが編集中かどうか)を判定するようにしたのが、ver 1.1.2になります。

さて、最後の不具合の原因ですが、これも上に書いた通り、iPhone SDK側の問題になります。

より具体的に書くと、tableView(tableViewCell)上にtextViewを配置して、viewControllerによるビューの自動回転を有効にし、iPhone SDK 2.2.1(以前)を指定してビルドしたバイナリを、iPhone OS 3.0以降で動作させると発生する問題、となります。
# かなりレアなケースかも(^^;)。

iPhone SDK 2.2.1付属のサンプル UICatalogをビューの自動回転に対応させたものや、単にtableViewCell上にtextViewを1個配置しただけのコードですら同じ現象が発生しましたから、アプリ側のコードに依存する問題(つまりプログラムミス)ではないのはまず間違いありません。

一番簡単な解決方法は、iPhone SDK 3.0以降でビルドする事(すなわち、iPhone OS 2.2.1サポートを止めてしまう事)なんですが・・・。

正直、この問題にはまいりました。マギノートの現行仕様、リスト上での直接入力(と iPhone OS 2.2.1以降対応)、を採用する限り解決方法がなさそうだし、かといって OS 2.2.1を切り捨てるのもなんだか忍びない。
# リスト上での直接入力を捨てるのは論外。

どうしたもんでしょうかねぇ・・・。

関連する記事

0 コメント:

BlogPeople People