0

Приложение иногда сбой [NSObject(NSObject) doesNotRecognizeSelector:], селектор [UIImageView setImage:].Почему сбой приложения с помощью [NSObject (NSObject) doesNotRecognizeSelector:]?

enter image description here

Я захватил его, установив точку останова исключения и авария происходит при установке в UIImageView.image в prepareForReuse из UICollectionViewCell:

class MyCell: UICollectionViewCell { 

    var coverImageView = UIImageView() 

    ... 

    override func prepareForReuse() { 
     super.prepareForReuse() 

     coverImageView.image = nil 
    } 
} 

prepareForReuse называется затем конкретизируется клетка:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

    let cell = myCollectionView.dequeueReusableCell(withReuseIdentifier: "myReuseID", for: indexPath) as! MyCell 
    ... 
} 

Почему это происходит?

Также я не могу загрузить представление данных быстрого просмотра для UIImageView, так что, возможно, объект был выпущен?

enter image description here

Сообщения об ошибках в консоли являются:

2017-01-21 15:56:19.653 MyApp[4873:20387361] -[__NSMallocBlock__ size]: unrecognized selector sent to instance 0x608000880aa0 
2017-01-21 15:56:37.697 MyApp[4873:20387361] invalid mode 'kCFRunLoopCommonModes' provided to CFRunLoopRunSpecific - break on _CFRunLoopError_RunCalledWithInvalidMode to debug. This message will only appear once per execution. 

2017-01-21 15:56:38.847 MyApp[4873:20617657] [Optimizely Logging]: Successfully saved data file to disk. Code revision is 229 
2017-01-21 15:56:42.723 MyApp[4873:20387361] [Optimizely Logging]: (ERROR) NSInvalidArgumentException: Stack Trace: 
(
    0 CoreFoundation      0x000000010f587d4b __exceptionPreprocess + 171 
    1 libobjc.A.dylib      0x000000010ef6121e objc_exception_throw + 48 
    2 CoreFoundation      0x000000010f5f7f04 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132 
    3 CoreFoundation      0x000000010f50d005 ___forwarding___ + 1013 
    4 CoreFoundation      0x000000010f50cb88 _CF_forwarding_prep_0 + 120 
    5 UIKit        0x000000010ba5e20f -[UIImageView _updateImageViewForOldImage:newImage:] + 297 
    6 UIKit        0x000000010ba59950 -[UIImageView setImage:] + 391 
    7 MyApp        0x000000010945e0d8 _TFC6MyApp23MyCell15prepareForReusefT_T_ + 136 
    8 MyApp        0x000000010945e112 _TToFC6MyApp23MyCell15prepareForReusefT_T_ + 34 
    9 UIKit        0x000000010c19aed1 -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:] + 773 
    10 UIKit        0x000000010c19b8ea -[UICollectionView dequeueReusableCellWithReuseIdentifier:forIndexPath:] + 169 
    11 MyApp        0x00000001095bdee2 _TFC6MyApp23MyViewController14collectionViewfTCSo16UICollectionView13cellForItemAtV10Foundation9IndexPath_CSo20UICollectionViewCell + 594 
    12 MyApp        0x00000001095be747 _TToFC6MyApp23MyViewController14collectionViewfTCSo16UICollectionView13cellForItemAtV10Foundation9IndexPath_CSo20UICollectionViewCell + 87 
    13 UIKit        0x000000010c18675f -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:isFocused:notify:] + 467 
    14 UIKit        0x000000010c186586 -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:] + 35 
    15 UIKit        0x000000010c18ba5e -[UICollectionView _updateVisibleCellsNow:] + 4803 
    16 UIKit        0x000000010c191725 -[UICollectionView layoutSubviews] + 313 
    17 UIKit        0x000000010b90dab8 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1237 
    18 QuartzCore       0x000000010d558bf8 -[CALayer layoutSublayers] + 146 
    19 QuartzCore       0x000000010d54c440 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366 
    20 QuartzCore       0x000000010d54c2be _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24 
    21 QuartzCore       0x000000010d4da318 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 280 
    22 QuartzCore       0x000000010d5073ff _ZN2CA11Transaction6commitEv + 475 
    23 QuartzCore       0x000000010d507d6f _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 113 
    24 CoreFoundation      0x000000010f52c267 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23 
    25 CoreFoundation      0x000000010f52c1d7 __CFRunLoopDoObservers + 391 
    26 CoreFoundation      0x000000010f510f8e __CFRunLoopRun + 1198 
    27 CoreFoundation      0x000000010f510884 CFRunLoopRunSpecific + 420 
    28 GraphicsServices     0x0000000112b77a6f GSEventRunModal + 161 
    29 UIKit        0x000000010b848c68 UIApplicationMain + 159 
    30 MyApp        0x00000001092f5a7f main + 111 
    31 libdyld.dylib      0x00000001115b568d start + 1 
) 
2017-01-21 15:56:42.725 MyApp[4873:20387361] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSMallocBlock__ size]: unrecognized selector sent to instance 0x608000880aa0' 
*** First throw call stack: 
(
    0 CoreFoundation      0x000000010f587d4b __exceptionPreprocess + 171 
    1 libobjc.A.dylib      0x000000010ef6121e objc_exception_throw + 48 
    2 CoreFoundation      0x000000010f5f7f04 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132 
    3 CoreFoundation      0x000000010f50d005 ___forwarding___ + 1013 
    4 CoreFoundation      0x000000010f50cb88 _CF_forwarding_prep_0 + 120 
    5 UIKit        0x000000010ba5e20f -[UIImageView _updateImageViewForOldImage:newImage:] + 297 
    6 UIKit        0x000000010ba59950 -[UIImageView setImage:] + 391 
    7 MyApp        0x000000010945e0d8 _TFC6MyApp23MyCell15prepareForReusefT_T_ + 136 
    8 MyApp        0x000000010945e112 _TToFC6MyApp23MyCell15prepareForReusefT_T_ + 34 
    9 UIKit        0x000000010c19aed1 -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:] + 773 
    10 UIKit        0x000000010c19b8ea -[UICollectionView dequeueReusableCellWithReuseIdentifier:forIndexPath:] + 169 
    11 MyApp        0x00000001095bdee2 _TFC6MyApp23MyViewController14collectionViewfTCSo16UICollectionView13cellForItemAtV10Foundation9IndexPath_CSo20UICollectionViewCell + 594 
    12 MyApp        0x00000001095be747 _TToFC6MyApp23MyViewController14collectionViewfTCSo16UICollectionView13cellForItemAtV10Foundation9IndexPath_CSo20UICollectionViewCell + 87 
    13 UIKit        0x000000010c18675f -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:isFocused:notify:] + 467 
    14 UIKit        0x000000010c186586 -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:] + 35 
    15 UIKit        0x000000010c18ba5e -[UICollectionView _updateVisibleCellsNow:] + 4803 
    16 UIKit        0x000000010c191725 -[UICollectionView layoutSubviews] + 313 
    17 UIKit        0x000000010b90dab8 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1237 
    18 QuartzCore       0x000000010d558bf8 -[CALayer layoutSublayers] + 146 
    19 QuartzCore       0x000000010d54c440 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366 
    20 QuartzCore       0x000000010d54c2be _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24 
    21 QuartzCore       0x000000010d4da318 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 280 
    22 QuartzCore       0x000000010d5073ff _ZN2CA11Transaction6commitEv + 475 
    23 QuartzCore       0x000000010d507d6f _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 113 
    24 CoreFoundation      0x000000010f52c267 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23 
    25 CoreFoundation      0x000000010f52c1d7 __CFRunLoopDoObservers + 391 
    26 CoreFoundation      0x000000010f510f8e __CFRunLoopRun + 1198 
    27 CoreFoundation      0x000000010f510884 CFRunLoopRunSpecific + 420 
    28 GraphicsServices     0x0000000112b77a6f GSEventRunModal + 161 
    29 UIKit        0x000000010b848c68 UIApplicationMain + 159 
    30 MyApp        0x00000001092f5a7f main + 111 
    31 libdyld.dylib      0x00000001115b568d start + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
+0

Может быть, есть другой класс присваивается этой переменной из XIb? – Sulthan

+0

В вашем журнале сбоя отсутствуют шаги между 0 и 4. Не могли бы вы также расширить это? – Sulthan

+0

@Sulthan Я не могу расширять его, это не журнал сбоев, а Debug Navigator в Xcoce. Также я не думаю, что есть какие-то шаги 1-3, потому что 'setImage' - это селектор, где он, кажется, падает. – Manuel

ответ

1

Я думаю, что проблема в том, что вы не вызывая обозначенную инициализатор UIImageView, поэтому его свойство image не инициализирован и пытается назначить ему сбой приложения:

- [NSMallocBlock размера]: непризнанный селектор направлен например 0x608000880aa0

Метод пытается вызвать метод size на старом изображении, но старый образ был установлен на некоторый случайный адрес памяти.

Чтобы исправить это, инициализировать UIImageView правильно используя назначенный инициализатору:

var coverImageView = UIImageView(image: nil) 
+0

Это имеет смысл, я попробую это. Однако почему существует публичный инициализатор 'UIImageView (void)' вообще? Разве это не должно быть частным, если оно вызывает крушение? – Manuel

+1

@Manuel Это унаследовано от 'NSObject' (и' UIView'). В Objective-C наследование инициализаторов не так просто, как в Swift. – Sulthan

+0

Я вижу, и как вы понимаете, что он только иногда падает? – Manuel