LoginSignup
56
48

More than 5 years have passed since last update.

iOSアプリでやってしまいがちなバグと対策

Last updated at Posted at 2015-11-15

iOSのアプリ開発をする時に、よくやってしまいがちな不具合の内容と対策メモです。

UILabelが長すぎて他の要素と被る、文字が切れる

詳細

constraintの設定が正しくされていなかったり、そもそもデザインに問題があるなど。

対策

  • 必ずユーザーが入力する項目は文字数制限をする
  • 開発環境で各項目の最大長データを用意して表示テストを行う

tableViewをスクロールするとcellの状態が元に戻る

詳細

tableView:cellForRowAtIndexPathがスクロールして複数回呼ばれると、ボタンのstatusが変更されていても、APIから初回取得したデータで書き換わってしまうなど。下記のような画面で起こる。
スクリーンショット 2015-11-17 12.04.21.png

対策

  • アクションがあったらUIButtonのステータスを変える+データの書き換えも行う

UITableViewCellやUICollectionViewCellに意図しない画像が表示される

詳細

cellにUIImageViewがある場合、セルのキャッシュが原因で同じ画像が表示されてしまったりすることがあります。

対策

下記のようにcellのクラス内でprepareForReuseを使って使い回すタイミングで初期化します。

- (void)prepareForReuse
{
    // セルが画像をキャッシュして、同じ画像が表示されてしまうので初期化
    self.imageView.image = nil;
}

データが0件の場合の表示がおかしい

詳細

表示するデータが0件だった時にインジケータが表示され続けていたり、画面が真っ白だったり、
特定の件数以上の表示ができないなど。

対策

  • 0件の表示テストを行う

ページングがループしてしまう

詳細

tableViewなどで下部までスクロールしたらページングする実装などで、2ページ目以降も1ページ目と同じ内容が表示されてしまったりする不具合

対策

  • 1ページに表示する件数より多いデータでテストを行う
  • ページングのリクエストに正常にパラメータが渡っているかテストする

新規ユーザーだけで発生する不具合

詳細

アプリをアップデートしたケースでは発生しないが、新規でDLするとバグが発生するケース。

対策

  • 必ず新規DL&ユーザー登録のパターンでテスト

delegateのメソッドがEXC_BAD_ACCESSになる

詳細

delegateのprotocol宣言をassignでしていたため、破棄された後にcallされると発生する

対策

宣言はweakで宣言する

NSDictionaryやNSArrayにnilやnullが入ることを考慮していない

詳細

objective-cのNSDictionaryやNSArrayはnilやnullの代入を許可していないので、意図せず代入すると NSInvalidArgumentExceptionが発生する

対策

代入前にチェックする

インジケータを通信処理が始まった後に表示させている

詳細

APIとの通信を開始する前にインジケータを表示させるのが本来の実装ですが、誤って通信開始後にインジケータを表示させてしまうと、通信が早い場合にインジケータが通信後に表示されてしまうという問題が発生します。

対策

必ずインジケータの表示は通信処理の前に行う

自戒

開発中はクラッシュなどに慣れてきてスルーしがちです。リリース後に問題になるものの中には、自分が既にクラッシュしているものだったということもあります。
必ず多少の異変やクラッシュも見逃さないように気にかけるようにしましょう。。

56
48
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
56
48