ios - 触摸 UIScrollView 时应用程序崩溃

标签 ios objective-c ipad uiscrollview uiscrollviewdelegate

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

与这个问题非常相似:UIScrollView EXC_BAD_ACCESS crash in iOS 但是,我尝试了这些解决方案,但没有一个起作用。

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

Root View Controller :

- (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];
}

第二个 View Controller :

- (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;
}

最佳答案

您的 secondViewController 对象被释放,因为它不会在任何地方保留,只有它的 View 在添加为 subview 时被保留。您还需要保留 secondaryViewController 的对象。

关于ios - 触摸 UIScrollView 时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19042251/

相关文章:

ios - UITableView objective-C 中的不同 UICollectionViews

iphone - 设置新文本时更改 UITextField 中的光标

iphone - 如何在没有过渡动画的情况下执行 segue

iphone - 如何删除/禁用配置文件过期警告

ios - 如何使用 ARC 释放 NSMutableArray 中的对象?

ios - 我需要4条If语句,然后如果所有条件都正确,则需要1条else语句

ios - NSUserDefaults 保存。编码问题

objective-c - cocos2d 层与层之间如何过渡?

ios - 确定必要变量类型的设计模式

html - 使用 iPad 查看网页上的灰色/黑色细线