CustomCell is empty or results in SIGABRT error [W/Code]

让人想犯罪 __ 提交于 2020-01-06 11:48:06

问题


I'm trying to create a video player that displays in a UITableView the thumbnails, titles and descriptions of the videos. When the user clicks on the raw it will open a new view with a WebView where the video will be played.

In the present moment I'm still trying to set the custom cell. I'm getting an error on the AppDelegate.swift file on the class AppDelegate: UIResponder, UIApplicationDelegate { line and the error is: Thread 1: signal SIGABRT. The error log is at the end of this post.

In the Main.storyboard I added a TableView (that I connected to the ViewController with the delegate and dataSource) with one prototype cell, where I added an ImageView and two labels. I also created a Swift File named CustomTableViewCell.swift. I set the View Controller Custom Class to ViewController, the identifier of the cell to customCell, style to "Custom" and it's class to CustomTableViewCell.

In the ViewController.swift I created an array with the information of the videos and I set the table functions.

I also tried other ways to write the code with solutions that I found here on Stack but I also get the same error or in the max I get a table with 3 empty cells. The code is down below. Can someone please tell how to put this custom cells working please?

Thanks in advance!

ViewController.swift

//
//  ViewController.swift
//  Cycloid
//
//  Created by smbss on 10/11/15.
//  Copyright © 2015 smbss. All rights reserved.
//

import UIKit

var videos = [Dictionary<String,String>()]

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        if videos.count == 1 {

            videos.removeAtIndex(0)

            // Check if places != to 1 and not 0 because we created the dictionary places as a global var outside the ViewController and that can not be empty.

        }

        videos.append(["title":"Video 1","description":"Description 1","thumbnail":"http://img.youtube.com/vi/6oXTFb-52Zc/0.jpg","video":"https://www.youtube.com/watch?v=6oXTFb-52Zc"])
        videos.append(["title":"Video 2","description":"Description 2","thumbnail":"http://img.youtube.com/vi/dkwuCeCQVg8/0.jpg","video":"https://www.youtube.com/watch?v=dkwuCeCQVg8"])
        videos.append(["title":"Video 3","description":"Description 3","thumbnail":"http://img.youtube.com/vi/6Zf_70xM1Cw/0.jpg","video":"https://www.youtube.com/watch?v=6Zf_70xM1Cw"])

    }

func numberOfSectionsInTableView(tableView: UITableView) -> Int {

        return 1
    }

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return videos.count

    }

    /*
    //If I use this there is no SIGABRT error but the cells are empty.
        func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

            let cell:UITableViewCell = UITableViewCell(style:UITableViewCellStyle.Default, reuseIdentifier:  "customCell")

            return cell

    */

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCellWithIdentifier("customCell", forIndexPath: indexPath) as! CustomTableViewCell

        let url = NSURL(string: videos[indexPath.row]["thumbnail"]!)
            let data = NSData(contentsOfURL: url!)

        cell.img?.image = UIImage(data: data!)
        cell.ttl?.text = videos[indexPath.row]["title"]
        cell.dsc?.text = videos[indexPath.row]["description"]

        return cell

}

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

}

CustomTableView.swift

    //
    //  CustomTableViewCell.swift
    //  Cycloid
    //


    // import Foundation
    import UIKit

    class CustomTableViewCell: UITableViewCell {

        @IBOutlet weak var img: UIImageView!

        @IBOutlet weak var ttl: UILabel!

        @IBOutlet weak var dsc: UILabel!

// I also tried deleting the code below.

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

        override func setSelected(selected: Bool, animated: Bool) {
            super.setSelected(selected, animated: animated)
        }
    }

Error log:

2015-11-10 18:00:23.069 Cycloid[5922:398570] Unknown class CustomTableViewCell in Interface Builder file.
2015-11-10 18:00:23.074 Cycloid[5922:398570] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UITableViewCell 0x7f96da6a0030> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key dsc.'
*** First throw call stack:
(
        0   CoreFoundation                      0x000000010d55ef45 __exceptionPreprocess + 165
        1   libobjc.A.dylib                     0x000000010f282deb objc_exception_throw + 48
        2   CoreFoundation                      0x000000010d55eb89 -[NSException raise] + 9
        3   Foundation                          0x000000010d927a6b -[NSObject(NSKeyValueCoding) setValue:forKey:] + 288
        4   UIKit                               0x000000010de2f96f -[UIView(CALayerDelegate) setValue:forKey:] + 173
        5   UIKit                               0x000000010e133a71 -[UIRuntimeOutletConnection connect] + 109
        6   CoreFoundation                      0x000000010d49fa80 -[NSArray makeObjectsPerformSelector:] + 224
        7   UIKit                               0x000000010e132454 -[UINib instantiateWithOwner:options:] + 1864
        8   UIKit                               0x000000010debe177 -[UITableView _dequeueReusableViewOfType:withIdentifier:] + 388
        9   UIKit                               0x000000010debe549 -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:] + 71
        10  Cycloid                             0x000000010d37a2dd _TFC7Cycloid14ViewController9tableViewfS0_FTCSo11UITableView21cellForRowAtIndexPathCSo11NSIndexPath_CSo15UITableViewCell + 125
        11  Cycloid                             0x000000010d37ac7f _TToFC7Cycloid14ViewController9tableViewfS0_FTCSo11UITableView21cellForRowAtIndexPathCSo11NSIndexPath_CSo15UITableViewCell + 79
        12  UIKit                               0x000000010ded0e2a -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 782
        13  UIKit                               0x000000010ded0f3f -[UITableView _createPreparedCellForGlobalRow:willDisplay:] + 74
        14  UIKit                               0x000000010dea6307 -[UITableView _updateVisibleCellsNow:isRecursive:] + 3187
        15  UIKit                               0x000000010ded9d1c -[UITableView _performWithCachedTraitCollection:] + 92
        16  UIKit                               0x000000010dec1884 -[UITableView layoutSubviews] + 223
        17  UIKit                               0x000000010de2fe40 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 710
        18  QuartzCore                          0x00000001122c559a -[CALayer layoutSublayers] + 146
        19  QuartzCore                          0x00000001122b9e70 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366
        20  QuartzCore                          0x00000001122b9cee _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24
        21  QuartzCore                          0x00000001122ae475 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 277
        22  QuartzCore                          0x00000001122dbc0a _ZN2CA11Transaction6commitEv + 486
        23  QuartzCore                          0x00000001122dc37c _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 92
        24  CoreFoundation                      0x000000010d48a947 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
        25  CoreFoundation                      0x000000010d48a8b7 __CFRunLoopDoObservers + 391
        26  CoreFoundation                      0x000000010d47fe2c CFRunLoopRunSpecific + 524
        27  UIKit                               0x000000010dd764f5 -[UIApplication _run] + 402
        28  UIKit                               0x000000010dd7b30d UIApplicationMain + 171
        29  Cycloid                             0x000000010d37be0d main + 109
        30  libdyld.dylib                       0x000000010fd8a92d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

回答1:


go to your storyboard, select the prototype cell, remove your custom class (so that is is a regular UITableViewCell again), build the project once, then set the custom class back to CustomTableViewCell and try again.



来源:https://stackoverflow.com/questions/33637486/customcell-is-empty-or-results-in-sigabrt-error-w-code

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!