首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSUnknownKeyException UICollectionView

NSUnknownKeyException UICollectionView
EN

Stack Overflow用户
提问于 2016-11-22 10:29:01
回答 2查看 801关注 0票数 0

最近,我为我的应用程序实现了一个新视图,它使用UICollectionView作为要加载到的图像的网格:

代码语言:javascript
复制
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
    }

}

现在,这个类中的代码很可能是完全颠倒的,因为我必须遵循这个教程。所以这里没有个人主动权。因此,当我试图进入这个视图时,可能会产生这个错误:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-22 11:30:30

我怀疑您确实将我们的IBOutlet imageCollectionView重命名为images_collection,但没有在Storyboard中更新。

要解决这个问题:

  • 右键单击童话板中的imageCollectionView
  • 单击"x“按钮移除指向Memories View的链接

  • 通过从代码中的IBOutlet拖动到故事板中的imageCollectionView创建一个新链接

票数 1
EN

Stack Overflow用户

发布于 2016-11-22 11:17:45

这一职能的问题是:

代码语言:javascript
复制
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("memory_image_1", forIndexPath: indexPath) as! CollectionViewController

return cell

您正在尝试将UICollectionViewCell转换为CollectionViewController。对该行末尾的简单更改:

代码语言:javascript
复制
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.rowindexPath.section确定行。

另外,如果要为单元格使用自定义类,它处理的是默认视图以外的视图,则需要将cell转换为自定义类,而不是UICollectionViewController,尽管我假设您仍然在查看教程--这还不是您将要尝试的。

正如我在对这个问题的评论中所指出的,这个网站上的教程-- https://www.raywenderlich.com/136159/uicollectionview-tutorial-getting-started和其他教程--对于初学者来说是非常好的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40739424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档