2017-05-13 3 views
1

Ich versuche, die Größe für meine Zelle nach dem, was ist in Dies ist mein Code und es stürzt ab und ich kann keine Fehlermeldung finden.UICollectionView sizeForItemAt IndexPath

extension TimelineCollectionVC: UICollectionViewDelegateFlowLayout { 



func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "timeline", for: indexPath) as? Timeline 

    cell?.textView.translatesAutoresizingMaskIntoConstraints = true 
    cell?.textView.sizeToFit() 



    if cell?.containerView.subviews.count == 0 { 
     cell?.containerHeight.constant = 1 
    } else { 
     cell?.containerHeight.constant = (cell?.containerView.subviews.first?.frame.size.height) ?? 80 
    } 

    let cellHeight = (cell?.upperView.bounds.height)! + (cell?.textView.bounds.height)! + (cell?.containerView.bounds.height)! + (cell?.lowerView.bounds.height)! 


    return CGSize(width: 375, height: cellHeight) 



} 

}

Grund: '- [NSCFString setSizeHasBeenSet]: unerkannte Selektor Instanz gesendet 0x610000076bc0' *** Erstschlingen Aufrufliste: ( 0 Corefoundation 0x0000000109dd9d4b __exceptionPreprocess + 171 1 libobjc.A.dylib 0x00000001094d921e objc_exception_throw + 48 2 CoreFoundation 0x0000000109e49f04 - [NSobjekt (NSObjekt) doesNotRecognizeSelector:] + 132 3 CoreFoundation 0x0000000109d5f005 ___forwarding_ + 1013 4 Corefoundation 0x0000000109d5eb88 _CF_forwarding_prep_0 + 120 5 UIKit 0x00000001080d9485 - [UICollectionViewFlowLayout _getSizingInfosWithExistingSizingDictionary:] + 3691 6 UIKit 0x00000001080da97b - [UICollectionViewFlowLayout _fetchItemsInfoForRect:] + 127 7 UIKit 0x00000001080d3504 - [UICollectionViewFlowLayout prepareLayout] + 273 8 UIKit 0x00000001080f3d6c - [UICollectionViewData _prepareToLoadData] + 159 9 UIKit 0x00000001080f4618 - [UICollectionViewData validateLayoutInRect:] + 57 10 UIKit 0x000000010809b6d4 - [UICollectionView layoutSubviews] + 232 11 UIKit 0x0000000107817ab8 - [UIView (CALayerDelegate) layoutSublayersOfLayer:] + 1237 12 Quartz 0x0000000106fcdbf8 - [CALayer layoutSublayers] + 146 13 Quartz 0x0000000106fc1440 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366 14 Quartz 0x0000000106fc12be _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24 15 Quartz 0x0000000106f4f318 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 280 16 Quartz 0x0000000106f7c3ff _ZN2CA11Transaction6commitEv + 475 17 Quartz 0x0000000106f7cd6f _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 113 18 Corefoundation 0x0000000109d7e267 CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION + 23 19 CoreFoundation 0x0000000109d7e 1D7 __CFRunLoopDoObservers + 391 20 Corefoundation 0x0000000109d628a6 CFRunLoopRunSpecific + 454 21 UIKit 0x000000010774caea - [UIApplication _run] + 434 22 UIKit 0x0000000107752c68 UIApplicationMain + 159 23 Moden 0x0000000104ab4fbf Haupt + 111 24 libdyld.dylib 0x000000010ad4e68d beginnen + 1 ) Libc + + abi.dylib: Beenden mit nicht abgefangener Ausnahme vom Typ NSException (lldb)

+1

Können Sie das Absturzprotokoll oder zumindest den oberen Teil des Absturzprotokolls posten? –

+0

Verwenden Sie den Debugger und gehen Sie durch den Code. BTW - es gibt keinen Grund, "Zelle" und optional zu machen. Wenn es sich nicht um eine "Timeline" -Instanz handelt, möchten Sie, dass es abstürzt, da dies ein klarer Fehler in Ihrer App ist. Dann können Sie all diese unnötigen "?" In allen "Zellen" -Referenzen loswerden. Und dann kannst du diese fiesen "!" - Operatoren loswerden (was "hier abstürzen" bedeutet). – rmaddy

+0

@ScottThompson Ich bekomme kein Absturzprotokoll, es stürzt nur ab und zeigt meine AppDelegate-Klasse (Thread1: EXC_BAD_ACCESS ~) –

Antwort

0

Sie sollten dequeueReusableCell hier nicht verwenden. Das ist nur zum Erstellen neuer Zellen. In diesem Fall möchten Sie eine vorhandene Zelle erhalten und sollten wahrscheinlich func cellForItem(at indexPath: IndexPath) -> UICollectionViewCell? in der Klasse UICollectionView verwenden.

+0

lass sizingView = Bundle.main.loadNibNamed ("MyNib", Besitzer: self, Optionen: nil)? [0] als? MyCell, aber das ist nicht das Problem –

Verwandte Themen