UICollectionView和Supplementary View崩溃

时间:2015-09-25 07:32:58

标签: ios swift uicollectionview

我有一个工作正常的UICollectioView。 有两种方法可以访问此页面。

  1. 虽然app。
  2. 点按推送通知。
  3. 除了一个案例外,一切都很好。

    如果用户在聊天中然后他退出应用程序(主页按钮) 然后他得到一个推送通知他按下它并且应用程序崩溃。

    崩溃:

      

    2015-09-25 10:28:15.140任务[298:16922] *断言失败    - [UICollectionView _createPreparedSupplementaryViewForElementOfKind:atIndexPath:withLayoutAttributes:applyAttributes:],   /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3505.16/UICollectionView.m:1519   2015-09-25 10:28:15.146 Quest [298:16922] * 由于终止应用程序   未捕获的异常'NSInternalInconsistencyException',原因:   '未设置UICollectionView dataSource'   ***首先抛出调用堆栈:(0x1828b4f5c 0x1973b7f80 0x1828b4e2c 0x1837a3f3c 0x187f97a38 0x187e6ebd4 0x187e6fb54 0x187e69b88   0x187e0700c 0x18760df14 0x187608b20 0x1876089e0 0x18760807c   0x187607dd0 0x1880c0bd4 0x18286c48c 0x18286bdc4 0x182869d4c   0x182798dc0 0x18d8ec088 0x187e72f60 0x100215590 0x197be28b8)   libc ++ abi.dylib:以未捕获的类型异常终止   NSException

    推送处理程序中的

    代码:

    func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
    
                    let home = storyboard.instantiateViewControllerWithIdentifier("home") as! HomeViewController
                    let chat = storyboard.instantiateViewControllerWithIdentifier("chat") as! ChatViewController
    
                    var controllers : [UIViewController] = [login, chat]
                    NotificationManager.handleNotification(userInfo, controllers: &controllers, storyboard: storyboard)
                    navC.viewControllers = controllers
                    self.window?.makeKeyAndVisible()
    
    }
    

    集合设置代码

    @IBOutlet weak var chatCollectionView: UICollectionView! {
        didSet {
            chatCollectionView.registerNib(UINib(nibName: "ChatTimeStampCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "ChatTimeStampCell")
            chatCollectionView.registerNib(UINib(nibName: "ChatReceiverCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "ChatReceiverCell")
            chatCollectionView.registerNib(UINib(nibName: "ChatSenderCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "ChatSenderCell")
            chatCollectionView.registerNib(UINib(nibName: "ChatHeaderCollectionReusableView", bundle: nil), forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "ChatHeaderCell")
    
            chatCollectionView.dataSource = self
            chatCollectionView.delegate = self
        }
    }
    

1 个答案:

答案 0 :(得分:12)

如果您在集合视图中使用自定义布局,请检查其数据源是否为零:

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect

结果应如下所示:

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
    if (self.collectionView.dataSource != nil) {
        // Your layout code    
        return array;
    }
    return nil;
}

此更改解决了以下问题:

  
      
  • 断言失败 - [UICollectionView _createPreparedSupplementaryViewForElementOfKind:atIndexPath:withLayoutAttributes:applyAttributes:]
  •   

您还可以检查以下主题,但在我的情况下它们没有解决任何问题: UICollectionView and Supplementary View (header)

Removing empty space, if the section header is hidden in the UICollectionView

希望它会对你有所帮助,你不会浪费我那么多的时间。 @eeeee谢谢你指点我正确的方向。