2009-09-28 12 views
4

在方法viewForZoomingInScrollView:授人以我的滾動型我做這些看似無害的:UIScrollView錯誤?浮富= scrollview.zoomScale崩潰的應用程序

//滾動視圖是傳遞給此方法

浮動富=滾動視圖參數。 zoomScale

熱潮!崩潰,你好gdb。

這是一個已知的錯誤嗎?我應該提交嗎?

乾杯, 道格

+0

你對NSLog的反應是什麼(「zoomScale:%f」,scrollView.zoomScale); – jantimon 2009-09-28 15:03:37

+0

你確定s crollview不是零? – Daniel 2009-09-28 16:00:41

+0

一個零滾動視圖不應該崩潰,至少不會在這一點。 – 2009-09-28 17:39:09

回答

7

我得到這個,我認爲這是因爲訪問zoomScale最終調用viewForZoomingInScrollView,導致無限遞歸。

但我只是猜測...

+0

你是贏家moshy。有些難以理解的原因。 scrollView.zoomScale包含一個對viewForZoomingInScrollView的調用:因此在該方法內的調用會遞歸。實際上,我的調試器正在試圖向我展示104684堆棧幀的輸出。 Oy公司。我想我會保持與這種方法的距離。 好看。乾杯。 – dugla 2009-09-29 03:10:54

2

這將是有益的,看看在Xcode的調試器控制檯窗口中顯示輸出。通常當你遇到崩潰時,調試器控制檯會提供一些額外的信息(通過command-shift-R打開,或者在菜單中運行>控制檯)。如果有導致崩潰的異常,它會說哪一個。無論如何,您可以在崩潰後立即鍵入bt(用於回溯),並在發生崩潰時查看調用堆棧。

在您的特定情況下,您可能無意中發佈了UIScrollView對象,但仍有指向舊解除分配對象位置的指針。這會讓你在下一次調用UIScrollView中的任何方法時崩潰,並且由於zoomScale是一個getter訪問器,因此它將被視爲方法調用。發生崩潰時,此問題最明顯的症狀是調試器控制檯中的EXC_BAD_ACCESS異常。

+0

泰勒,我發送一個消息傳遞給一個ScrollViewDelegate方法的參數之一: - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView; 我成功使用scrollView的各種屬性,如scrollView.contentSize和scrollView.contentOffset我可以通過觀察對scrollView.contentSize的更改並形成比例:scrollView.contentSize/self.unzoomedContentSize來解決此問題。 這對我來說並不是真正的表演擋板。它只是讓我擔心在UIScrollView花園的岩石下躺着什麼其他的漂浮物。 -Doug – dugla 2009-09-29 01:24:03

1

道格感謝您的修復。爲什麼我沒有想到這個? > _ <

就像OP所說的那樣,每次抓取zoomScale屬性都會觸發viewForZoomingInScrollView。

非常多,不要使用裏面的zoomScale屬性viewForZoomingInScrollView,如果你這樣做? CRASH !!!!

0

正如moshy所說,發生這種情況的原因是因爲zoomScale屬性涉及對viewForZoomingInScrollview的調用,從而導致無限的方法調用。