私はかなり単純なアプリ (私の最初の重要な 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 アウトレットに接続されたときにクラッシュしていることがわかりました。そうでないときにクラッシュしました。コンセントを取り外して作り直したところ、動作するようになりました。何が起こったのかわかりませんが、どういうわけか修正しました。提案をしてくれたすべての人に感謝します!