2013-08-28 76 views
1

我在我的應用程序中使用了CAShapeLayerUIBezierPath。我有一個重新加載按鈕。當我多次重新載入我的視圖時,它會給我一個EXC_BAD_ACCESS錯誤。這裏是我的代碼:獲取錯誤訪問錯誤

self.layer.sublayers = nil; 
NSInteger numOfDays = [self differenceBetweenTwoDatesFromDate:startDate toDate:endDate]; 
CGFloat widthOfComponent = numOfDays * dayWidth; 
if (self.frame.size.width > widthOfComponent) { 
    DLog(@"%@",NSStringFromCGRect(self.frame)) 
    widthOfComponent = self.frame.size.width - 2 * DIFFERENCE_FROM_ORIGIN; 
    dayWidth = widthOfComponent/numOfDays; 
} 
self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, widthOfComponent, self.frame.size.height); 

[self reloadData]; 

[super layoutSubviews]; 

我收到的時候我傳遞了新的框架self.frame此錯誤。

+0

'self.frame'是越來越發布.. –

+0

但怎麼樣了,可能嗎? – h999

+0

什麼是「自我」?不,'self.frame'不會被釋放。 –

回答

0

它是由self.layer.sublayers = nil引起的。不分青紅皁白地刪除所有子層會導致iOS 7中令人討厭的崩潰,這可能會在程序執行後期發生。我已使用rootLayer.sublayers = nil[rootLayer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)]進行了徹底測試。必須有一個系統創建的圖層出現混亂。

你必須保持自己的層的陣列,並刪除它們自己:

[myArrayOfLayersIAdded makeObjectsPerformSelector:@selector(removeFromSuperlayer)];