0

私はかなり単純なアプリ (私の最初の重要な iOS アプリ) を持っています。私はアプリを完成させて動作させましたが、今日の早い段階でオブジェクト指向の設計原則により適合するようにリファクタリングすることにしました (単純にするために、アプリケーションのほとんどをメイン ビュー コントローラーに配置しました。 2 番目のクラスに分割します)。今、アプリを実行しようとすると、メイン ビューが読み込まれる前に次のエラーでクラッシュします。

IntervalPlayer[1374:907] -[UIButton intValue]: unrecognized selector sent to instance 0x1c5569d0

どこにでも print ステートメントをスローすることで、initWithNibName:bundle: OK を通過したことがわかりますが、viewDidLoad が呼び出される前にアプリがクラッシュします。明らかに、コード内の何かが UIButton で intValue を呼び出そうとしていますが、コードにはそれを行うものは何もありません。アプリ全体で intValue を 1 回だけ使用し、その行をコメントアウトすると同じエラーが発生します。実際、スーパークラス コンストラクターの呼び出し後に initWithNibName:bundle: 内のすべてをコメント アウトしようとしましたが、同じ場所で同じエラーが発生しています。つまり、私が知る限り、空のコンストラクター内の何かが原因で、アプリ内の他の何かが実行される前に UIButton で intValue が呼び出されます。デリゲートまたはニブに何かあると思いますが、両方に目を通しましたが、異常なものは見られませんでした.

コード スニペットがないことをお許しください。これを説明するために何を提供すればよいかわかりません。エラーがまだ発生している空のコンストラクターを次に示します。

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)aBundle
{
    self = [super initWithNibName:(NSString *)nibName bundle:(NSBundle *)aBundle];
    if (self) {
    }
    return self;
 }

追加する他のコードを誰かが提案できる場合は、質問を編集してそうします。

ありがとう、

ダン

編集: はい、ARC を使用しています。また、明確にするために、これはメインのView Controllerで発生しており、デリゲートには触れていません。

編集 2: クラッシュは私のデリゲートにあります。デバッガによると、問題の行は [self.window makeKeyAndVisible]; です。私はデリゲートに触れていないので、NIB が何らかの形で無効であると推測します。

最終編集: クラッシュの原因となるボタンが見つかるまでボタンを削除し、View Controller に接続されていたすべてのものに接続し直すことで、ボタンが UIButton アウトレットに接続されたときにクラッシュしていることがわかりました。そうでないときにクラッシュしました。コンセントを取り外して作り直したところ、動作するようになりました。何が起こったのかわかりませんが、どういうわけか修正しました。提案をしてくれたすべての人に感謝します!

4

2 に答える 2

0

アプリでブレークポイントをオンにして、XCodeがエラーが発生した行を表示するようにします。

  1. ブレークポイントナビゲータを開きます
  2. 左下の[+]ボタンをタップして、例外ブレークポイントを追加します
  3. ヒットしただけ
  4. アプリを実行すると、問題の原因となっているコード行で停止します。

問題が発生した場合は、クラッシュの原因となっているコード行をここに投稿してください

于 2013-03-11T21:24:15.100 に答える
0

これとまったく同じエラーと症状が発生しました。ボタンを再作成し、コンセントをやり直しても役に立ちませんでした。ただし、IB 接続を間違えたわけではありません。

私がぼんやりとしていたことは、ボタンのアウトレットtagに名前を付けることでした。これは、すべての UIView が持つ同じ名前の NSInteger プロパティにエイリアスを付けました。私のNIBをロードするとき、iOSは本質的にどこかで実行してい[tag getInt]ましたが、必要な NSInteger プロパティの代わりに私のボタンを使用していました。

于 2013-08-15T14:44:31.373 に答える