2016-11-22 2 views
0

Я недавно реализовал новый взгляд на мое приложение, которое имеет UICollectionView, действующий в качестве сетки для изображения должны быть загружены в:NSUnknownKeyException UICollectionView

class MemoriesView: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource{ 

@IBOutlet weak var images_collection: UICollectionView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 
     self.navigationController?.navigationBarHidden = false 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return 12 
    } 

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
     let cell = collectionView.dequeueReusableCellWithReuseIdentifier("memory_image_1", forIndexPath: indexPath) as! CollectionViewController 
     return cell 
    } 

} 

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

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<Certi.MemoriesView 0x7fb613f3c8d0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key imageCollectionView.' 

*** First throw call stack: 
(
    0 CoreFoundation      0x000000010ee6ae65 __exceptionPreprocess + 165 
    1 libobjc.A.dylib      0x000000010f2c7deb objc_exception_throw + 48 
    2 CoreFoundation      0x000000010ee6aaa9 -[NSException raise] + 9 
    3 Foundation       0x000000010cfb29bb -[NSObject(NSKeyValueCoding) setValue:forKey:] + 288 
    4 UIKit        0x000000010d98c320 -[UIViewController setValue:forKey:] + 88 
    5 UIKit        0x000000010dbbaf41 -[UIRuntimeOutletConnection connect] + 109 
    6 CoreFoundation      0x000000010edab4a0 -[NSArray makeObjectsPerformSelector:] + 224 
    7 UIKit        0x000000010dbb9924 -[UINib instantiateWithOwner:options:] + 1864 
    8 UIKit        0x000000010d992eea -[UIViewController _loadViewFromNibNamed:bundle:] + 381 
    9 UIKit        0x000000010d993816 -[UIViewController loadView] + 178 
    10 UIKit        0x000000010d993b74 -[UIViewController loadViewIfRequired] + 138 
    11 UIKit        0x000000010d999f4f -[UIViewController __viewWillAppear:] + 120 
    12 UIKit        0x000000010d9c9e44 -[UINavigationController _startCustomTransition:] + 1203 
    13 UIKit        0x000000010d9da23f -[UINavigationController _startDeferredTransitionIfNeeded:] + 712 
    14 UIKit        0x000000010d9db3af -[UINavigationController __viewWillLayoutSubviews] + 57 
    15 UIKit        0x000000010db81ff7 -[UILayoutContainerView layoutSubviews] + 248 
    16 UIKit        0x000000010d8b44a3 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 703 
    17 QuartzCore       0x000000011101459a -[CALayer layoutSublayers] + 146 
    18 QuartzCore       0x0000000111008e70 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366 
    19 QuartzCore       0x0000000111008cee _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24 
    20 QuartzCore       0x0000000110ffd475 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 277 
    21 QuartzCore       0x000000011102ac0a _ZN2CA11Transaction6commitEv + 486 
    22 UIKit        0x000000010d7f7f7c _UIApplicationHandleEventQueue + 7329 
    23 CoreFoundation      0x000000010ed96a31 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17 
    24 CoreFoundation      0x000000010ed8c95c __CFRunLoopDoSources0 + 556 
    25 CoreFoundation      0x000000010ed8be13 __CFRunLoopRun + 867 
    26 CoreFoundation      0x000000010ed8b828 CFRunLoopRunSpecific + 488 
    27 GraphicsServices     0x00000001115d7ad2 GSEventRunModal + 161 
    28 UIKit        0x000000010d7fd610 UIApplicationMain + 171 
    29 Certi        0x000000010b92c1fd main + 109 
    30 libdyld.dylib      0x000000010fde392d start + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
+1

Эта строка 'пусть ячейки = collectionView.dequeueReusableCellWithReuseIdentifier ("memory_image_1", forIndexPath: indexPath), как! CollectionViewController' выглядит не так ... вы деактивируете ячейку и вынуждаете литье в «CollectionViewController» ..... – EvilGeniusJamie

+0

@EvilGeniusJamie Мне не удалось найти ни одного правильного учебника или документации по фактической реализации этого, так что это была просто догадка из учебника, который я видел. Вы предлагаете просто удалить это? Или изменить его как-то? Сама функция я имею в виду. – Benni

+2

'let cell = collectionView.dequeueReusableCellWithReuseIdentifier (" memory_image_1 ", forIndexPath: indexPath) как!UICollectionViewCell' Обновите эту строку, как указано в комментарии – PrafulD

ответ

1

Я подозреваю, что вы переименовали наш IBOutletimageCollectionView в images_collection, но не обновили его в раскадровке.

Чтобы это исправить:

  • правой кнопкой мыши ваш imageCollectionView в раскадровке
  • удалить ссылку на Memories View, нажав на маленькую кнопку "х"

  • Создать новое соединение, перетащив с вашего IBOutlet в коде для imageCollectionView в раскадровке

+0

Это избаловало ошибку, спасибо! Я также принимаю и другой ответ, но поскольку этот ответ на самом деле решил проблему, я считаю ее правильной. – Benni

1

Эта функция является проблема:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("memory_image_1", forIndexPath: indexPath) as! CollectionViewController 

return cell 

Вы пытаетесь преобразовать UICollectionViewCell к CollectionViewController. Простое изменение в конце этой строки:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("memory_image_1", forIndexPath: indexPath) as! UICollectionViewCell 
// see below 
return cell 

предотвратит эту ошибку, однако вы все равно получите пустые ячейки. Точка, где я добавил комментарий \\ see below, где вам нужно обновить значения cell, чтобы выбрать то, что отображается в этой строке. Строку можно определить из indexPath.row и indexPath.section, если вы используете несколько разделов.

Кроме того, если вы используете пользовательский класс для своей ячейки, который обрабатывает представления, отличные от стандартных, это то, что вам нужно сделать cell этому пользовательскому классу, а не UICollectionViewController, хотя я предполагаю, я все еще смотрю на учебные пособия, это не то, к чему вы еще собираетесь пытаться.

Как указано в моем комментарии к вопросу, учебник - https://www.raywenderlich.com/136159/uicollectionview-tutorial-getting-started - и другие учебники на этом сайте очень хороши для новичков.

+0

Спасибо за очень подробное объяснение! – Benni

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