首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >_UIQueuingScrollView引发的无效参数异常

_UIQueuingScrollView引发的无效参数异常
EN

Stack Overflow用户
提问于 2013-11-15 15:17:10
回答 6查看 11.8K关注 0票数 22

我的应用程序包含一个嵌入在UITableViewController中的UIPageViewController,它不时引发这个异常:

代码语言:javascript
复制
Invalid parameter not satisfying: [views count] == 3

回溯:

代码语言:javascript
复制
* thread #1: tid = 0x6239fa, 0x03d1d88a libobjc.A.dylib`objc_exception_throw, queue = 'com.apple.main-thread, stop reason = breakpoint 25.3
    frame #0: 0x03d1d88a libobjc.A.dylib`objc_exception_throw
    frame #1: 0x0404f448 CoreFoundation`+[NSException raise:format:arguments:] + 136
    frame #2: 0x03428fee Foundation`-[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 116
    frame #3: 0x01e7c535 UIKit`-[_UIQueuingScrollView _replaceViews:updatingContents:adjustContentInsets:animated:] + 185
    frame #4: 0x01e800ca UIKit`-[_UIQueuingScrollView _didScrollWithAnimation:force:] + 1231
    frame #5: 0x01e7bb57 UIKit`-[_UIQueuingScrollView _scrollViewAnimationEnded:finished:] + 104
    frame #6: 0x0190583c UIKit`-[UIScrollView(UIScrollViewInternal) animator:stopAnimation:fraction:] + 62
    frame #7: 0x0197096e UIKit`-[UIAnimator stopAnimation:] + 533
    frame #8: 0x0197100a UIKit`-[UIAnimator(Static) _advanceAnimationsOfType:withTimestamp:] + 325
    frame #9: 0x01970b76 UIKit`-[UIAnimator(Static) _LCDHeartbeatCallback:] + 67
    frame #10: 0x01663b8a QuartzCore`CA::Display::DisplayLinkItem::dispatch() + 48
    frame #11: 0x01663a46 QuartzCore`CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 310
    frame #12: 0x01663f6b QuartzCore`CA::Display::TimerDisplayLink::callback(__CFRunLoopTimer*, void*) + 123
    frame #13: 0x0400dbd6 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 22
    frame #14: 0x0400d5bd CoreFoundation`__CFRunLoopDoTimer + 1181
    frame #15: 0x03ff5628 CoreFoundation`__CFRunLoopRun + 1816
    frame #16: 0x03ff4ac3 CoreFoundation`CFRunLoopRunSpecific + 467
    frame #17: 0x03ff48db CoreFoundation`CFRunLoopRunInMode + 123
    frame #18: 0x0533b9e2 GraphicsServices`GSEventRunModal + 192
    frame #19: 0x0533b809 GraphicsServices`GSEventRun + 104
    frame #20: 0x01874d3b UIKit`UIApplicationMain + 1225

有没有人见过这个,或者知道原因是什么?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-01-07 14:12:26

编辑:在使用了更多的时间,我仍然可以看到错误的时候,所以这不是完整的修复(嗯.这一直是一种黑客行为)。一旦我找到了实际的解决方案,我会更新它。

我在使用UIPageViewController时遇到了同样的错误。调试问题几小时后,我发现原因是在UIPageViewController的setViewControllers:direction:animated:completion:.的完成处理程序中使用了UIView动画

我不知道为什么在那个阶段动画会导致断言错误(我不是在动画UIPageViewController或它的子视图控制器),但是在主队列中用dispatch_async包装代码块可以解决问题并停止崩溃。

票数 56
EN

Stack Overflow用户

发布于 2014-11-18 19:19:53

当我试图以编程方式转换到一个新页面时,我看到了这种崩溃。对我来说有意义的一个答案是,在过渡期间不允许他们触摸页面视图。

代码语言:javascript
复制
__block UIView *pageView = pageViewController.view;

// Disable page view to not allow the user to interrupt the page view animation and cause crash
pageView.userInteractionEnabled = NO;

[pageViewController setViewControllers:@[viewController] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:^(BOOL finished) {
    if (finished) {
        pageView.userInteractionEnabled = YES; // re-enable
    }
}];
票数 7
EN

Stack Overflow用户

发布于 2017-01-27 19:43:22

我用UIPageViewController和点。用户在点上滑动后,委托didFinishAnimating被调用,我触发其他动画,然后它崩溃。但只有用户在点上滑动时才会发生这种情况。

代码语言:javascript
复制
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray<UIViewController *> *)previousViewControllers transitionCompleted:(BOOL)completed
{
    if (completed && finished)
    {
        dispatch_async(dispatch_get_main_queue(), ^{
            [self animateSomeView];
        })
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20004310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档