2013-04-21 74 views
1

我有兩個UIView子類,比如說「Class A」和「Class B」。類A在其初始化程序中,代碼爲[self addSubview:instanceOfClassB];。而在B類的drawRect:是代碼行[self addSubview:imageViewInstance];。同樣在B類的drawRect:中,我將值分配給該imageView實例的animationImages,animationDurationanimationRepeatCount屬性。但是,我也在此UIImageView實例上調用startAnimating,但它總是使應用程序崩潰。然後,我嘗試從乙級的上海華盈的drawRect:是UIImageView的實例調用startAnimating,A級。但是,它仍然與錯誤崩潰:在drawRect之後有沒有直接調用的方法?

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '* -[__NSArrayM insertObject:atIndex:]: object cannot be nil'

而且具有「主題1:信號SIGABRT」上線消息代碼爲[imageView startAnimating];

我懷疑它在這裏崩潰,因爲B類的drawRect正在類的drawRect之後調用,所以,當我告訴圖像視圖啓動動畫崩潰,因爲圖像觀點尚未創建。 所以基本上我問的是在什麼方法可以告訴圖像視圖開始動畫沒有崩潰

+0

您可以添加異常斷點以查看代碼崩潰的位置:http://developer.apple.com/library/ios/#recipes/xcode_help-breakpoint_navigator/articles/adding_an_exception_breakpoint.html – 2013-04-21 07:11:56

+0

@weichsel - 我已經確定它在哪裏崩潰;問題是我無法找到一種替代方法來完成我上面描述的內容。 – pasawaya 2013-04-21 07:15:26

+0

問題 - 爲什麼在drawRect中添加imageViewInstance?爲什麼不在init方法中? – 2013-04-21 07:21:03

回答

2

drawRect:中修改狀態或調用與繪圖無關的方法聽起來像是一個非常糟糕的主意 - 除了繪圖之外,您不應該在drawRect:中執行任何操作。

drawRect:會在視圖或視圖的一部分需要重新繪製時自動調用。重繪操作的​​頻率和順序由系統決定,並取決於幾件事情(視圖層次結構,遮擋,...) - 因此,您也不能依賴調用drawRect:的特定順序。

您可以將對象的設置移出繪圖代碼,並根據用戶交互開始動畫。

+0

哈哈,我想,偉大的思想家都會這麼想。我更喜歡你的措辭,所以我會刪除我的答案。 – jrturton 2013-04-21 07:34:43

+0

如果我以前見過你的 - 沒有回答 - 它基本上是一樣的:) – 2013-04-21 07:45:40

+0

@weichsel - 謝謝你的回答,但是我的目標是在視圖加載時開始動畫,而不是在用戶提示時開始。無論如何要這樣做? – pasawaya 2013-04-21 14:26:33

相關問題