トラブルシューティング
ここでは、私が開発している時に遭遇したトラブルと解決方法を紹介します。
変更した内容が反映されない
メニューの「ビルド」→「すべてのターゲットをクリーニング」を実行した後にビルドする。
→たまに、変更前の状態が残ってしまう場合があるようです。
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];
}