簡體   English   中英

在viewWillTransitionToSize崩潰

[英]Crash in viewWillTransitionToSize

我正在使用Swift 2.2和Realm 1.0.2開發一個針對iOS 8.0+的應用程序作為我的數據存儲。

我在崩潰日志中看到很多與此代碼相關的崩潰,雖然我目前無法自己重現它們:

/// Resize cells when orientation changes.
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    if visible {
        dispatch_async(dispatch_get_main_queue()) {
            if let coordinator = coordinator as UIViewControllerTransitionCoordinator? {
                if self.collectionView != nil {
                    self.collectionView.reloadData()

                    coordinator.animateAlongsideTransition({ context in
                        self.collectionView.performBatchUpdates(nil, completion: nil)
                    }, completion: nil)
                }
            }
        }
    }
}

此代碼顯示在包含UICollectionView的視圖控制器中,該視圖根據方向顯示不同大小的單元格。 我不清楚為什么我需要在動畫之前使用self.collectionView.reloadData()但沒有它,邊距比預期寬得多。

這是我得到的痕跡:

0   libobjc.A.dylib                 0x0000000180f400b0 objc_retain + 16 (objc-object.h:341)
1   UIKit                           0x00000001873a1570 -[_UIViewControllerTransitionCoordinator _animateAlongsideTransitionInView:systemCompletion:animation:completion:] + 112 (UIViewControllerTransitioning.m:865)
2   UIKit                           0x0000000186b17f40 -[_UIViewControllerTransitionCoordinator animateAlongsideTransition:completion:] + 68 (UIViewControllerTransitioning.m:906)
3   MyApp                           0x00000001000fc78c 0x1000c0000 + 247692
4   libdispatch.dylib               0x000000018130d4bc _dispatch_call_block_and_release + 24 (init.c:760)
5   libdispatch.dylib               0x000000018130d47c _dispatch_client_callout + 16 (object.m:506)
6   libdispatch.dylib               0x0000000181312b84 _dispatch_main_queue_callback_4CF + 1844 (inline_internal.h:1063)
7   CoreFoundation                  0x0000000181878d50 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12 (CFRunLoop.c:1613)
8   CoreFoundation                  0x0000000181876bb8 __CFRunLoopRun + 1628 (CFRunLoop.c:2718)
9   CoreFoundation                  0x00000001817a0c50 CFRunLoopRunSpecific + 384 (CFRunLoop.c:2814)
10  GraphicsServices                0x0000000183088088 GSEventRunModal + 180 (GSEvent.c:2245)
11  UIKit                           0x0000000186a82088 UIApplicationMain + 204 (UIApplication.m:3772)
12  MyApp                           0x00000001000c92d8 0x1000c0000 + 37592
13  libdyld.dylib                   0x000000018133e8b8 start + 4 (start_glue.s:78)

我通過改變另一個屏幕上的方向然后快速返回到具有UICollectionView的方向來觸發類似的崩潰。 if visible檢查似乎解決了這個問題,我得到的這些崩潰的次數要少得多,但仍有一些。 我們將非常感謝您在閱讀這些痕跡時在我的代碼或資源中查找問題的任何想法。

這里有幾個小問題:

  • 始終在UIViewController生命周期方法中調用super
  • GCD調用可能會導致意外的不一致

請記住, dispatch_async僅使用GCD調度您的代碼塊,並且不會保證它何時執行。 完全可能在動畫開始后執行該塊,使大小轉換處於不一致狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM