触摸 UIScrollView 时应用程序崩溃

Posted

技术标签:

【中文标题】触摸 UIScrollView 时应用程序崩溃【英文标题】:App crashes when UIScrollView touched 【发布时间】:2013-09-27 03:31:18 【问题描述】:

我有一个RootViewController,它创建了一个SecondViewController。在viewDidAppear 中的SecondViewController 内部,我创建了一个UIScrollView 和一个UIPageControl 并将它们添加到视图中。我也这样做:scrollview.delegate = selfSecondViewController<UIScrollViewDelegate>。我还在SecondViewController 中实现了scrollViewDidScroll。所有这些工作、编译和运行。但是,当我触摸UIScrollView 时,应用程序崩溃了。对于我的生活,我无法弄清楚为什么。这是最愚蠢的问题,但我无法解决。

和这个问题很相似:UIScrollView EXC_BAD_ACCESS crash in ios 但是,我尝试了这些解决方案,但它们都不起作用。

我在下面粘贴了一些代码。非常感谢您的帮助。

RootViewController:

- (void)viewDidAppear:(BOOL)animated

    SecondViewController *secondViewController = [[SecondViewController alloc] init];
    secondViewController.view.frame = CGRectMake(50, 50, 925, 600);
    secondViewController.view.backgroundColor = [UIColor lightGrayColor];

    [self.view addSubview:secondViewController.view];

第二视图控制器:

- (void)viewDidAppear:(BOOL)animated

    CGRect scrollViewFrame = CGRectMake(50, 50, 824, 500);
    self.scrollView = [[UIScrollView alloc] initWithFrame:scrollViewFrame];
    self.scrollView.delegate = self;
    self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width*3,
                                             self.scrollView.frame.size.height);
    self.scrollView.backgroundColor = [UIColor darkGrayColor];
    self.scrollView.showsHorizontalScrollIndicator = YES;
    self.scrollView.showsVerticalScrollIndicator = YES;
    self.scrollView.pagingEnabled = YES;

    [self.view addSubview:self.scrollView];

    CGRect pageControlFrame = CGRectMake(0, 0, 50, 20);
    self.pageControl = [[UIPageControl alloc] initWithFrame:pageControlFrame];
    self.pageControl.numberOfPages = 3;
    self.pageControl.currentPage = 0;
    self.pageControl.backgroundColor = [UIColor grayColor];

    [self.view addSubview:self.pageControl];


- (void)scrollViewDidScroll:(UIScrollView *)scrollView

    CGFloat pageWidth = self.scrollView.frame.size.width;
    float fractionalPage = self.scrollView.contentOffset.x / pageWidth;
    NSInteger page = lround(fractionalPage);
    self.pageControl.currentPage = page;

【问题讨论】:

我认为崩溃是由于您的“- (void)scrollViewDidScroll:(UIScrollView *)scrollView”方法中的任何变量中的意外值造成的。所以记录 pageWidth、fractionalPage 和 page 的值来检查它是否给出了预期的结果。 【参考方案1】:

您的secondViewController 对象被释放,因为它没有保留在任何地方,只有它的视图被保留,因为它被添加为子视图。您还需要保留 secondViewController 的对象。

【讨论】:

你能多说一些吗?我对整个保留/释放的事情都很陌生。 长话短说,如果您使用 ARC,只需将其放入您的 .h 文件 SecondViewController *secondViewController 并使用 secondViewController = [[SecondViewController alloc] init];

以上是关于触摸 UIScrollView 时应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

iOS:使用 2 个手指时取消 UIScrollView 触摸

带有 UIButtons 的 UIScrollView - 当按钮开始触摸时,滚动视图不会滚动

UiScrollview scrollviewDidScroll 检测用户触摸

触摸屏时应用程序崩溃

在android中触摸EditText时应用程序崩溃

Android Studio 应用程序在触摸 MapView 时崩溃