2011-11-07 57 views
0

我試圖以編程方式創建UIScrollView。我有一個scrollView該ViewController。這是我如何實例化它在loadViewScrollView中的視圖

CGRect fullScreenRect = [[UIScreen mainScreen] applicationFrame]; 
    self.scrollView = [[UIScrollView alloc] initWithFrame:fullScreenRect]; 
    self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height); 

我那麼一些項目到它,然後它在loadView添加到view如下:

[self.scrollView addSubview:self.searchBar]; 
[self.scrollView addSubview:button]; 
[self.view addSubview:self.scrollView]; 

到目前爲止,一切都應該罰款。但是,在其他功能中,我將添加ImageViews,然後我需要設置滾動視圖的內容大小。我這樣做,只是用[self.scrollView addToSubView:image],當我想編輯滾動視圖的內容大小,我做它的方式如下:

// Calculate scroll view size 
float sizeOfContent = 0; 
for (int i = 0; i < [self.scrollView.subviews count]; i++) { 
    UIImageView *view =[self.scrollView.subviews objectAtIndex:i]; 
    sizeOfContent += view.frame.size.height; 
    [view release]; 
} 

// Set content size for scroll view 
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width, sizeOfContent); 

我一直在main.m文件類得到一個EXC_BAD_ACCESS錯誤。

我懷疑問題是保留實際的scrollView,因爲我認爲scrollView不保留相同的對象是視圖的子視圖。

有什麼建議嗎?提前致謝!

回答

1

如果您已將self.scrollView定義爲@property(nonatomic, retain),那麼首先錯誤的是該行;

self.scrollView = [[UIScrollView alloc] initWithFrame:fullScreenRect]; 

它將scrollView的保留計數設置爲2,這不是您所期望的。 alloc保留這類似的房屋,

scrollView = [[UIScrollView alloc] initWithFrame:fullScreenRect]; 

我覺得你BAD_ACCESS錯誤來自這裏;

for (int i = 0; i < [self.scrollView.subviews count]; i++) { 
    UIImageView *view =[self.scrollView.subviews objectAtIndex:i]; 
    sizeOfContent += view.frame.size.height; 
    [view release]; 
} 

爲什麼你releasing視圖?你沒有alloc呢,所以沒有理由去release呢。刪除[view release]行並再次檢查。

+0

所以我應該創建一個本地滾動視圖,然後將其設置爲全局滾動視圖並釋放本地滾動視圖? – darksky

+1

@Nayefc是的,這也很好,實際上這種方式是首選。 –

相關問題