I just got this error in one of my apps, and after checking some other apps the same error is happening. None of my IBOutlets
and IBActions
are con
Duplicate of: Xcode 6: can't connect any IBOutlet to ViewController but here's the trick:
You can also see that the link between the parent view and the custom class is broken (not visible anymore) which is a huge problem.
I had the exact same issue with the app i'm working on actually, updating Xcode from 5.xxx to 6.1. The workaround that worked for me was to remove the reference of every view controller and re-add them to the project... Unfortunately, in some cases, mine actually, all the connections get lost again when XCode is closed.
To everyone facing that issue, here's the (annoying) trick :
I can understand those things could be reaaally annoying, but it worked for me... Hope it will help someone else !
For me I had to remove the reference and add back to my project the -XIB- file for my view controller. Simply removing the view controller .h/.m did not reset the outlets, but removing the .xib and adding it back did!
I have this problem only with @protocol
defined IBOutlets
if I don't redefine them in the implementing class.
Probably the only thing we can do is file a bug.
I had this issue with a Swift UIViewController subclass. I had removed the original view that IB created for me, and added a new view—which I was unable to connect.
I went to the Identity inspector for the File's owner, and tried to re-enter it, thinking that maybe it had been modified somehow. Oddly, the class name did not autocomplete. It seemed like XCode was unable to actually see my class.
I tried removing and re-adding both the .swift
and .xib
files, to no avail. XCode would allow me to manually type in my owning class name, but it would not autocomplete. It seemed to think it didn't exist, or wasn't valid for this context.
Looking back at my code, I had something like the following:
extension SomeViewController {
func foo() -> Bool {
return false
}
}
class SomeViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
It compiles just fine, but on a hunch, I removed the extension. I saved the file, went back to the .xib
, and was able to set the File's Owner identity with autocompletion again. I was also able to wire up the view.
It would suck if extensions always broke things of course, so I tried again, this time with the extension after the class:
class SomeViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
extension SomeViewController {
func foo() -> Bool {
return false
}
}
Everything still worked in IB. To sanity check, I moved the extension back ahead of the class definition, and things were again horked.
I took a look a the *-Swift.h generated by XCode, and at least relative to the affected class, there seemed to be no differences—regardless of where I put the extensions in the Swift file, they were always declared after the @interface
definition for the actual class in the header.
So, long story short, in my case this was due to Swift extensions (I say extensions because my actual code has many) coming before the class definition. I moved them after the class definition, and the problem went away.
Do you get the same issue if you connect the actions/outlets in Interface Builder instead of the assistant editor? For actions try control dragging from your object in IB to your first responder object (or whatever you have your class set to).
I was having the same issue but it was because i changed the name of the view controller in the Project Navigator to MapViewController but its name stayed the same (ViewController) in the code. once i changed it, it worked