1

「クラス A」と「クラス B」という 2 つの UIView サブクラスがあります。クラス A のイニシャライザには、コード[self addSubview:instanceOfClassB];. クラス BdrawRect:にはコード行があります[self addSubview:imageViewInstance];。また、クラス Bでは、その imageView インスタンスの、、およびプロパティdrawRect:に値を割り当てます。ただし、この UIImageView インスタンスも呼び出しますが、常にアプリケーションがクラッシュします。次に、クラス B のスーパービューであるクラス Aからその UIImageView インスタンスを呼び出してみましたが、それでもエラーでクラッシュします。animationImagesanimationDurationanimationRepeatCountstartAnimatingstartAnimatingdrawRect:

キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: ' * -[__NSArrayM insertObject:atIndex:]: オブジェクトを nil にすることはできません'

コードの行に「Thread 1: signal SIGABRT」メッセージがあります[imageView startAnimating];

drawRectクラス B がクラス A の後に呼び出されているため、ここでクラッシュしていると思われますdrawRect。したがって、画像ビューにアニメーションを開始するように指示すると、画像ビューがまだ作成されていないためにクラッシュします。基本的に私が求めているのは、画像ビューにクラッシュなしでアニメーションを開始するように指示できる方法は何ですか?

4

1 に答える 1

2

内部から状態を変更したり、描画に関係のないメソッドを呼び出したりすることは、非常に悪い考えのように思えます。描画以外 drawRect:では何もすべきではありません。drawRect:

drawRect:ビューまたはビューの一部を再描画する必要があるときはいつでも自動的に呼び出されます。drawRect:再描画操作の頻度と順序はシステムによって決定され、いくつかのもの (ビュー階層、オクルージョンなど) に依存します。つまり、呼び出される 特定の順序に依存することもできません。

オブジェクトのセットアップを描画コードから移動し、ユーザーの操作に基づいてアニメーションを開始できます。

于 2013-04-21T07:28:20.130 に答える