iPhoneアプリ開発の虎の巻
HOME > トラブルシューティング

トラブルシューティング

ここでは、私が開発している時に遭遇したトラブルと解決方法を紹介します。

変更した内容が反映されない

メニューの「ビルド」→「すべてのターゲットをクリーニング」を実行した後にビルドする。
 →たまに、変更前の状態が残ってしまう場合があるようです。

InterfaceBuilderでの修正が反映されない

InterfaceBuilder上で保存をしていない。
 →InterfaceBuilder上で修正した場合は、Xcodeとは別に保存処理を行う必要があります。
※Xcode4からはInterfaceBuilderがXcode内に統合されたので同時に保存されるようになりました。

オブジェクトを呼び出すと落ちる

オブジェクトがreleaseされている
→オブジェクトの生成時にretainを指定する。
  (autoreleaseが指定されている場合はretainに変更してみる。(解放忘れに注意!))

ナビゲーションバーに「戻る」ボタンが表示されない

戻り先の画面にタイトルが設定されていない
→戻り先の画面にタイトルを設定する。

Warning

・Multiple build commands for output file ~
 同じ名前のファイルが2箇所以上で参照されている
  →重複しているものを削除する
  (重複しているものが不明な場合は、メニューバーの「Product」→「Clean」でクリアする)

・'xxx' is deprecated
 'xxx'は古い推奨されていない書き方である
  → 推奨されている書き方に書き換える

・class '<クラス名>' does not implement the '<プロトコル名>' protocol
 '<クラス名>'クラスには、'<プロトコル名>'の宣言をする必要がある
  → @interface~ のところにプロトコル名を宣言する

・Unused variable '変数名'
 '変数名'がどこにも使われていない
  →変数を削除する。

・Local declaration of '変数名' hides instance value
 メンバ変数名とローカル変数名がかぶっている
  →どちらかの変数名を変更する。

・Method definition for 'メソッド名' not found
 メソッドがヘッダーに定義してあってメインに定義していない
  →不要ならヘッダーから削除する。必要ならメインに定義する。

実機に転送できない

実機でテストするためアプリをiPhoneに転送すると、「program received signal "SIGABRT"」というエラーが発生して実機テストができない。
→こうなってしまったら、実機に入れたアプリを削除してからiPhoneを再起動して、再度アプリを転送すれば実行できるようになります。
(原因はよくわかりません。)

wait_fences: failed to receive reply: 10004003 が発生する

Alertを表示させると「wait_fences: failed to receive reply: 10004003」というワーニングが出ることがあります。私の環境ではAlertの表示を少し遅らせたら出なくなりました。
(原因はよくわかりません。)

// 修正前
  UIAlertView *alert =
    [[[UIAlertView alloc]initWithTitle:nil message:@"メッセージ"
    delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil] autorelease];
    [alert show];
// 修正後

  // 0.1秒後にAlertを表示する
  [self performSelector:@selector(showAlert) withObject:nil afterDelay:0.1f];

  // Alertを表示するメソッド
  -(void)showAlert{
    UIAlertView *alert = [[[UIAlertView alloc]initWithTitle:nil
      message:@"メッセージ" delegate:nil cancelButtonTitle:nil
      otherButtonTitles:@"OK", nil] autorelease];
    [alert show];
  }
totop