2015-09-25 2 views
2

У меня есть UICollectioView, который отлично работает. Есть 2 способа добраться до этой страницы.Ошибка UICollectionView и дополнительного просмотра

  1. хотя приложение.
  2. tap on push сообщение.

Все работает хорошо, за исключением одного случая.

Если пользователь находится в чате, а затем он выходит из приложения (домашняя кнопка) , тогда он получает уведомление о нажатии, которое он нажимает на него, и приложение выходит из строя.

аварии:

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 Квест [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() 

} 

код настройки collectioview

@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 
    } 
} 
+0

Где у вас этот чатКоллекцияView? Внутри ChatViewController? – Shripada

+0

Попробуйте также установить источник данных и делегат изнутри раскадровки – Shripada

+1

Вы используете пользовательский макет здесь? Я тоже столкнулся с подобным недоумением. Оказалось, что 'layoutAttributesForElementsInRect' в моем настраиваемом макете вызывался после того, как deinit вызывается в моем подклассе UICollectionView. Проверка для 'collectionView.dataSource == nil' в' layoutAttributesForElementsInRect' и возвращение 'nil' в этом случае исправили проблему для меня. – eeeee

ответ

10

Если вы используете пользовательский макет с вашей точки зрения сбора, проверьте его источник данных равна нулю в:

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect 

Результат должен выглядеть примерно так:

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

Это изменение решает следующую проблему:

  • отказ Assertion в - [UICollectionView _createPreparedSupplementaryViewForElementOfKind: atIndexPath: withLayoutAttributes: applyAttributes:]

Вы также можете проверить следующие темы, однако они ничего не решить в моем случае: UICollectionView and Supplementary View (header)

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

Надеюсь, это поможет вам, и вы не потратите столько времени, сколько я. @eeeee спасибо, что указал мне в правильном направлении.

+1

Было так неясно. Благодаря! –

Смежные вопросы