2011-11-07 61 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是的,这也很好,实际上这种方式是首选。 –

相关问题