استثناء المعلمة غير صالح القيت من قبل _ويوينغسكرولفيو

StackOverflow https://stackoverflow.com//questions/20004310

سؤال

بلدي التطبيق الذي يحتوي على إيتابليفيوكونترولر جزءا لا يتجزأ من إيباجيفيوكونترولر يثير هذا الاستثناء من وقت لآخر:

Invalid parameter not satisfying: [views count] == 3

باكتريس:

* 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

هل رأى أي شخص هذا بالفعل أو لديه فكرة عما يمكن أن يكون السبب?

هل كانت مفيدة؟

المحلول

تحرير: بعد استخدام هذا الإصلاح لمزيد من الوقت، لا يزال بإمكاني رؤية الخطأ في بعض الأحيان لذلك ليس هذا هو الإصلاح الكامل (حسنا ... كان دائما نوعا من الاختراق).سأقوم بالتحديث مع الحل الفعلي بمجرد أن أجدها.


لقد واجهت هذا الخطأ نفسه باستخدام UipageViewController.بعد ساعات من تصحيح المشكلة، لقد وجدت السبب كان يستخدم الرسوم المتحركة Uiview داخل معالج إكمال SetViewControllers: الاتجاه: الرسوم المتحركة: الانتهاء:.

لا أعرف لماذا يتسبب الرسوم المتحركة في تلك المرحلة من خطأ التأكيد (لم أكن أرفق uipageviewcontroller أو لوحات تحكم عرض الأطفال الخاصة به)، ولكن التفاف كتلة التعليمات البرمجية مع dispatch_async على قائمة الانتظار الرئيسية يحل المشكلة وإيقاف التعطل.

نصائح أخرى

رأيت هذا التعطل عند محاولة الانتقال برمجيا إلى صفحة جديدة.إجابة ذات معنى بالنسبة لي هي عدم السماح لهم باللمس طريقة عرض الصفحة أثناء الانتقال.

giveacodicetagpre.

فقط تأكد من أنك لا تقوم بأي رسوم متحركة داخل ViewDidAppear في وحدة التحكم التي تعود إليها.أو إذا كان عليك القيام بذلك بعد بعض التأخير بمجرد ظهر العرض.

يمكنني استخدام uipageviewcontroller مع النقاط.بعد أن يدافع المستخدم على النقاط، دعا المفوض DidFinishAnimating وتشغيل الرسوم المتحركة الأخرى، ثم تعطل.لكنه يحدث فقط عندما يزداد المستخدم على النقاط.

giveacodicetagpre.

واجهت نفس الخطأ مع إيفيوكونترولر كنت قد جزءا لا يتجزأ من إيباجيفيوكونترولر.في حالتي ، أدركت أن وحدة تحكم طفلي قد تجاوزت viewWillAppear و viewDidAppear دون الاتصال من خلال super.على الرغم من أنني لا أستطيع إلا أن أخمن التفاصيل ، فمن المنطقي أن القيام بذلك قد يفسد إدارة العرض.إضافة super المكالمات في جعل المشكلة تختفي.

في حالتي كانت المشكلة في تنفيذ UIPageViewControllerDelegate:

أقوم بتحديث القيود في pageViewController(_ pageViewController:, didFinishAnimating:, previousViewControllers:, transitionCompleted:)

dispatch_async في قائمة الانتظار الرئيسية حل هذه المشكلة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top