Why "Unknown class"?

Question

I am a beginner in programming, and new to Stack Overflow as well. I'm still figuring out how codes and this website work, so I'm sorry if I didn't use them correctly. (I'm not a native English speaker, but I'll do my best to explain my question as well as possible)

I'm using Xcode Version 8.1, and Swift.

I'm building an app for my school project. I've already created To-Do-List App and Countdown Timer App. So, I want to put them together in one app now.

I created a new project and inserted Tab Bar Controller. Then copied all the files I used in To-Do-List and Countdown Timer apps, and set up the storyboard.

There are no caution marks, but when I run the simulator, an error comes up and the simulator stops. The error I got is "Thread 1: signal SIGABRT" in this line in AppDelegate.swift:

class AppDelegate: UIResponder, UIApplicationDelegate {

and the message in the console is:

2017-01-06 20:32:22.207 PP Final App[61701:3259153] Unknown class PomodoroViewController in Interface Builder file.
2017-01-06 20:32:22.713 PP Final App[61701:3259153] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x7fd7faf075d0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key lbTimer.'
*** First throw call stack:
(
    0   CoreFoundation                      0x00000001100c234b __exceptionPreprocess + 171
    1   libobjc.A.dylib                     0x000000010fb2321e objc_exception_throw + 48
    2   CoreFoundation                      0x00000001100c2299 -[NSException raise] + 9
    3   Foundation                          0x000000010f63326f -[NSObject(NSKeyValueCoding) setValue:forKey:] + 291
    4   UIKit                               0x000000011067f4ef -[UIViewController setValue:forKey:] + 88
    5   UIKit                               0x00000001108f379e -[UIRuntimeOutletConnection connect] + 109
    6   CoreFoundation                      0x0000000110067590 -[NSArray makeObjectsPerformSelector:] + 256
    7   UIKit                               0x00000001108f2122 -[UINib instantiateWithOwner:options:] + 1867
    8   UIKit                               0x0000000110685c21 -[UIViewController _loadViewFromNibNamed:bundle:] + 386
    9   UIKit                               0x0000000110686543 -[UIViewController loadView] + 177
    10  UIKit                               0x0000000110686878 -[UIViewController loadViewIfRequired] + 201
    11  UIKit                               0x00000001106870cc -[UIViewController view] + 27
    12  UIKit                               0x00000001106e52df -[UITabBarController transitionFromViewController:toViewController:transition:shouldSetSelected:] + 483
    13  UIKit                               0x00000001106e4721 -[UITabBarController transitionFromViewController:toViewController:] + 59
    14  UIKit                               0x00000001106e05e2 -[UITabBarController _setSelectedViewController:] + 365
    15  UIKit                               0x00000001106e0464 -[UITabBarController setSelectedViewController:] + 234
    16  UIKit                               0x000000011059e6e6 +[UIView(Animation) performWithoutAnimation:] + 90
    17  UIKit                               0x00000001106daa00 -[UITabBarController _selectDefaultViewControllerIfNecessaryWithAppearanceTransitions:] + 354
    18  UIKit                               0x00000001106dbb7a -[UITabBarController viewWillAppear:] + 206
    19  UIKit                               0x000000011068ca0f -[UIViewController _setViewAppearState:isAnimating:] + 692
    20  UIKit                               0x000000011068d11f -[UIViewController __viewWillAppear:] + 147
    21  UIKit                               0x000000011068e913 -[UIViewController viewWillMoveToWindow:] + 507
    22  UIKit                               0x0000000110595151 -[UIView(Hierarchy) _willMoveToWindow:withAncestorView:] + 621
    23  UIKit                               0x00000001105a5cf0 -[UIView(Internal) _addSubview:positioned:relativeTo:] + 451
    24  UIKit                               0x00000001105947a1 -[UIView(Hierarchy) addSubview:] + 838
    25  UIKit                               0x0000000110550f5b -[UIWindow addRootViewControllerViewIfPossible] + 849
    26  UIKit                               0x00000001105513a2 -[UIWindow _setHidden:forced:] + 293
    27  UIKit                               0x0000000110564cb5 -[UIWindow makeKeyAndVisible] + 42
    28  UIKit                               0x00000001104ddc89 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 4818
    29  UIKit                               0x00000001104e3de9 -[UIApplication _runWithMainScene:transitionContext:completion:] + 1731
    30  UIKit                               0x00000001104e0f69 -[UIApplication workspaceDidEndTransaction:] + 188
    31  FrontBoardServices                  0x0000000113ed3723 __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__ + 24
    32  FrontBoardServices                  0x0000000113ed359c -[FBSSerialQueue _performNext] + 189
    33  FrontBoardServices                  0x0000000113ed3925 -[FBSSerialQueue _performNextFromRunLoopSource] + 45
    34  CoreFoundation                      0x0000000110067311 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    35  CoreFoundation                      0x000000011004c59c __CFRunLoopDoSources0 + 556
    36  CoreFoundation                      0x000000011004ba86 __CFRunLoopRun + 918
    37  CoreFoundation                      0x000000011004b494 CFRunLoopRunSpecific + 420
    38  UIKit                               0x00000001104df7e6 -[UIApplication _run] + 434
    39  UIKit                               0x00000001104e5964 UIApplicationMain + 159
    40  PP Final App                        0x000000010f52c1cf main + 111
    41  libdyld.dylib                       0x000000011373c68d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

In this message, I see "Unknown class PomodoroViewController in Interface Builder file." This is the problem, right? But I don't know why I got this message. Are there any problems in the file?

Is the way I use Tab Bar Controller right?

Here's the code file of Pomodoro View Controller:

PomodoroViewController

import UIKit

class PomodoroViewController: UIViewController {

    @IBOutlet weak var lbTimer: UILabel!

    let pomodoroTime: TimeInterval = 60 * 25 //Pomodoro Timer 25 minutes
    let formatter = DateFormatter()
    var theTime: TimeInterval = 0.0

    override func viewDidLoad(){
        super.viewDidLoad()
        formatter.dateFormat = "mm:ss"
        let startTime = Date(timeIntervalSinceReferenceDate: pomodoroTime)
        lbTimer.text = formatter.string(from: startTime)
    }

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

    @IBAction func countDown(_ sender: UIButton) {
        theTime = pomodoroTime
        Timer.scheduledTimer(timeInterval: 1.0,
                             target: self,
                             selector: #selector(PomodoroViewController.tickTimer(timer:)),
                             userInfo: nil,
                             repeats: true)
    }

    func tickTimer(timer: Timer){
        theTime -= 1.0
        let newTime = Date(timeIntervalSinceReferenceDate: theTime)
        if theTime < 0.1 {
            timer.invalidate()
        }
    }

}

and this is how the storyboard looks like: storyboard


Show source
| xcode   | swift   | ios   2017-01-06 21:01 1 Answers

Answers to Why &quot;Unknown class&quot;? ( 1 )

  1. 2017-01-06 23:01

    What this error means is:

    1. You have a storyboard (or maybe a xib) that says that one of the view controllers is a PomodoroViewController. But...
    2. PomodoroViewController does not exist when the app is running.

    The message says that iOS tried to find PomodoroViewController but it wasn't there, so it tried to use UIViewController instead. Except UIViewController doesn't have the lbTimer property, which makes the app crash.

    There are a couple of reasons this could happen:

    • You might have forgotten to copy PomodoroViewController to the new project.
    • If you did copy it, you might not be including it in the app target. [Files can be included in the Xcode project that don't get compiled, because you might use the same project file for more than one target.]

    In the second case, make sure that the file is checked in the file inspector on the right side of the Xcode window:

    enter image description here

Leave a reply to - Why "Unknown class"?

◀ Go back