Unknown class FirstViewController in Interface Builder file - iphone

When I run my application i got this
I see in my console this message "Unknown class FirstViewController in Interface Builder file."
I am running TabBar application.
How can I fix this?

It looks like you deleted FirstViewController.h & .m from project, but forgot to change view controller's class in nib file.

Go to project , targets , build phases , compile Sources and add the unknown class ..done.

Right click on Storyboard --> Open As --> Source Code
Find your unknown class name in the storyboard source file. It may be because you have accidentally assigned a custom class name for one of your UIView subclass'.

It is kinda hard to understand your comments, but I think you may have deleted the FirstViewController but forgot to change all the references to it. you may need to go to MainWindow.xib and look for all FirstViewController UI components and delete them

Sometimes it happens when you change target name for some reason, you have then to open storyboard as source file, then search for old target name, replace it with the new name, should work if it is the case, hope it helps.

This can also happen if you use the same package name for multiple projects (if you're being lazy with your provisioning). Go into your user directory, then go to Library/Application Support/iPhone Simulator/[your sdk version]/Applications and delete what's in there. You may also have to delete the app from the device. That will remove any accidental references to files from other projects, which can cause this error.

When you add multi project to Workspace. If you use the same Product Name in your's projects. It can conflict.
Rename Product Name in the projects have a same name.
... Hope this help ....

This happened to me just after Git merge and resolving few conflicts.
It had screwed up my XCode project.
I tried all over the StackOverflow. At first I thought my Custom class .m file hasn't been added to the Compile Sources class list. But it's one case, however even after adding it, it gave me same issue back.
How I resolved:
I kept a backup of my .xib file and its backing custom class .m and .h files.
Then clean the project and try to run the app via XCode (which might not work)
Then re-add the files back to the XCode project and it will work.
Cheers!

This can sometimes happen if you made changes to a VC i.e. deleted prototype cell(s) within a tableview.
If all else fails I find cleaning project and restarting Xcode gets things back on track.

Related

Xcode Build Input File Cannot Be Found

I decided to move my controller to a folder inside of the controller folder for better organization. After doing so, I am getting a "Build input file cannot be found '/Users/.../Xcode/Development/.../.../Controller/ProfileController.swift'
I looked for an answer to this thinking this has happened a lot but the only thing turned up was missing info.plist files which I believe this is different. I moved my file to '/Users/.../Xcode/Development/.../.../Controller/Dashboard/Profile/ProfileController.swift' which caused this issue.
Any idea how to resolve this? I'm assuming you can nest folders and that shouldn't be an issue.
This looks like your Xcode project is referencing a file with an absolute path instead of relative path.
Check on "build Phases" -> "Compile Sources" if the file is listed and maybe greyed-out or duplicated. Remove all those entries from the list, remove the file from the project tree (without trashing it) and re-drop it into the project.
Check again the file in the "Compile Sources". Now there should be once. Build.
Not sure why it resolved itself but after restarting my Mac, I created another TestController inside of the new folder I wanted to reference, assigned that controller to the storyboard and finally I removed the TestController and placed my ProfileController back into the storyboard it started working.
Just thought I would post my solution for others in case it is helpful.

Delete by mistake the storyboard

I delete the storyboard by mistake from my app.
Where I can find it and restore it,
or I lost it?
The default storyboard filename is Main.storyboard, so that's what you should look for unless you gave it a different name. (Older versions named it MainStoryboard.storyboard, so if you are working on an older project, you might need to look for that instead.)
First, check your project folder (using the Finder). If it's there, you can drag it back into your project in Xcode, or you can use the “Add Files to …” menu option.
If it's not there, check the trash can. If it's there, you can right-click it and choose “Put Back”, then follow the steps in the previous paragraph.
Try running again your app and Xcode will create the file automatically, this worked for me.

Could not insert new action connection Error

I get this error, when try to create new action for UIButton by dragging blue arrow from UIButton to my header file (you know, this new feature of XCode 4...)
When I create action in code by myself and connect it in old way, simply by dragging from button to File's Owner, it's works well
Here's screenshot:
Make sure your .m file exists in the project and on disk. Make sure it is correct with an #implementaiton-#end block. Open it in Xcode, close it, if the error persist, restart Xcode.
Xcode is trying to write to EditPUViewController.m (in the dealloc method etc.) but could not find it.
Also, it always helps to hard-clean the project with ⌘+⌥+⇧+K.
Try this:
Open Organizer then Project Tab.
Clear the "Derived Data". Xcode should re-index your project then and code sense should work. At least worked for me.
I had a comparable problem when trying to connect an action. To solve it I manually added the IBAction and then XCode allowed me to connect from the button to the code.
Go to Xcode -> preferences -> location tab -> derived data -> clear derived dat.
I ran into this issue myself but none of the methods presented here worked for me. The error described in the question above occurred when I tried to create an IBAction in my view's header file (.h), whereas to my implementation file (.m) I couldn't even drag a line. (Xcode wouldn't even show this little popup where you can name your action.)
After trying for hours I figured that the reason why I couldn't create the IBAction was because I had removed the very last line from my .m file. Xcode automatically adds an extra empty line after the #end delimiter when you create a new Objective-C file.
Don't ask me why - but if you remove that line Xcode doesn't let you create any actions or outlets. (This is obviously an Xcode bug.)
I noticed that .m file was moved inside en.lproj folder.
Just delete (reference only) the .m file from the Xcode and moved .m out of the en.lproj. Add it again.Don't worry, you will get all your connections back.
It will fix the issue.
I recently came across this problem. I soon realized that the cause had been my own doing.
I had previously disabled XCode indexing (which used to take forever & eat up my RAM), using the below code in a terminal window:
defaults write com.apple.dt.XCode IDEIndexDisable 1
To revert XCode to its default state, i used the following line in a terminal window:
defaults write com.apple.dt.XCode IDEIndexDisable 0
Voila! All's well again..
I got the same error. Restarting Xcode did not fix it for me (I didn't want to reboot). The file was also not in the en.lproj folder (nor in the usual project folder after I deleted it from within Xcode). The fix for me was to re-create the file with a different name (Using different case in the filename alone was not enough to fix it... must be a different name entirely).
I ran into this problem when I created a class, deleted it and then created a new one with the same name. The workaround was not to reuse the name of the deleted class, but use a new one. Thus, I'd say it's a bug on the XCode side.
Remove the newly created class (don’t delete it, just remove link and then re-add it);
Save Xib file;
Restart Xcode;
You may want to delete Derived Data as well if it does still not work.
This seems because of XCode is missing reference or need to refresh manually.
In my case, removing the reference of the nib(.xib) and adding it again solved the problem.
In my case I had by accident selected the arm64 build. When compiling I got an error but I did not notice that since I was working with the UI trying to connect an action.
The error however was exactly the same. After changing to another architecture so the project compiled I could connect the action by holding the ctrl button as usual.
user2175983 and AstroCB answer's worked well for me:
Just delete all Derived data by running this command line in a terminal:
rm -frd ~/Library/Developer/Xcode/DerivedData/*
Restart Xcode
I just deleted the reference to the file in the Xcode project and then re-added the file back to project from the finder...
In Xcode 9 I had the same error after moving .m files in project from one directory to another. Deleting references to .m files and add them again did solve the issue.
I found the ANSWER. When you create a new file (Objective C files) for each view controller, you must check by clicking the box, next to your project name. So that your project includes this file. Otherwise, this error will persist, because your project hasn't connected to the file even though it created it.

Could not load nib in bundle on iPhone device

I'm trying to test an app I'm developing on my iPhone. To do that I changed the target from Simulator to Device on Xcode. The application is correctly uploaded to the device and it works. The main view is shown but if I try to open a secondary view, the application crashes.
On the iPhone log (I installed the iPhone configuration utility to see the console [is the only way to see the log from iPhone?]) I can see this error:
Could not load NIB in bundle
But, on the simulator it works fine. What's wrong? Any ideas?
I had the same problem and fixed it like so:
Open XCode Target
Click the "Build phases" tab
Click the "Copy bundle resources" section
Click the +
Add the missing Nib file
I've found that sometimes the device is case sensitive and the simulator is not.
What's the filename of your xib?
or
Try uninstalling the app from the simulator and installing it again - the simulator might have an old file left over from a previous run of the app - have you renamed / moved the xib at all during development?
I had a similar problem and was getting the same error. Turns out I was using the full name of the xib file in the attributes panel under "NIB Name:"
Don't use "SomeViewController.xib", just use "SomeViewController" without the ".xib" extension.
I had the same problem when invoking initWithNibName:#"MyViewController"
Changing the invocation to initWithNibName:NSStringFromClass([MyViewController class]) worked well
You can try these things:
Make sure case is correct
Use xib filename without the ".xib" extension
Remove any -(dash) or other special chars, use _(underscore)
Remove the xib file from the project and add back to the Xcode project
Check the build settings and make sure deployment is changed to currect SDK
In my case, the xib simply wasn't being copied into the bundle. Once I added the xib into the "Copy Bundle Resources" step for the application target, everything went fine.
I finally managed to solve that issue with these two steps:
In the view controller files inspector, remove any localization
(just for testing)
Ensure that you have checked the correct target membership
I don't know why it works on the simulator :(
For me, the problem was exactly what FreeAsInBeer said: the nib somehow was missing from the bundle, whereas it had been there before and worked properly in previous versions of the app.
To fix the problem, I did the following:
Select the project in the Project Navigator.
In the project settings select Build Phases.
Expand Copy Bundle Resources.
Scroll down (if necessary) and click on the + button.
In the dialog that appears, click on the Add Other... button.
Browse for the missing .XIB file in the file system.
Build and Run... the missing nib should appear when you run it.
This is just what worked for me when I got that message. Your mileage may vary, since circumstances are not always the same for everyone, but I hope this helps someone who runs into this issue.
-Evan
I ran into the same problem. In my case the nib name was "MyViewController.xib" and I renamed it to "MyView.xib". This got rid of the error.
I was also moving a project from XCode 3 to 4.2. Changing the Path type did not matter.
I had the same error message.
My problem, however was that my language settings on my phone were set on "English" and the Region on "United Kingdom". However, the file that could not be loaded was placed in the de.lproj directory.
Moving the file into the root directory solved it.
A simple mistake that might cause this error is trying to initWithNibName on an imported viewController when you are using a storyboard rather than individual Nib files. If this is the case then just init the controller instead of trying to init with a nib that doesn't exist, or init those fields with nil.
If Storyboard and no nib, change initWithNibName: bundle: to just be init OR initWithNibName:nil bundle:nil
For what its worth, I received this error when one of my tab bar buttons had the wrong class assigned to it.
I've got it to run with delete all of the localization from the xib
In the right window.
Maybe the file is in the localization folder.
I've the same problem. And my solution is remove all Localizations for the view.
I had exactly the behavior you described: works on simulator but get the "Could not load NIB in bundle" when running on the device, and the app remain stuck on the launch image.
In my case the problem was about the MainWindow.xib file that Xcode automatically created with English localization. I am supporting English and Italian in my app and realized that I was missing the localized version of MainWindow.xib for the Italian language.
Because I had no need to localize this file (it's Xcode default to create it localized) I fixed the problem by simply removing the English localization, so the same file is used independently of the localization. Another way to fix the problem would be to add the missing localized version, if you need it.
The app was crashing on the device because my device is configured for Italian language. The simulator instead was set to English and this is why the app run correctly. Just to verify, I set the simulator to Italian language and the app crashed confirming the localization problem.
I also had this problem when I loaded a child view controller from initWithCoder, which is a good place to initialise, but keep in mind you have to add it as an actual child AFTER the view has loaded.
So shift something like this:
[self addChildViewController: self.pageViewController];
[self.view addSubview: self.pageViewController.view];
[self.pageViewController didMoveToParentViewController:self];
...out of your init method and into viewDidLoad. Not saying this is your problem in particular but this may be helpful to others.

XCode uses an .xib not inside the project folder

I went back to an old project and recompiled it for OS 4.1 succesfully and ran it. I was asked to add a fourth tab to the Tab Bar, but I could not set its class to the newly added ModelsVC.h/.m. [edit: because it did not appear in the class dropdown, but the other viewcontrollers were there.]
I moved the project folder to a backup folder and unzipped a months old backup of the same project. It compiles and runs until the end of viewWillAppear for the first (default) view connected to the first tab, and then does nothing more. It is still running, but nothing is shown and nothing happens.
In the console, it says "Unknown class ModelsVC in Interface Builder file."
The problem is, that class didn't exist two months ago, so why should this way old project complain about it or even know about it?
I'd like to know where to look / tell XCode to use the .xib that is inside the project folder it is currently compiling.
And if it's path-related, how do I check what paths XCode looks in when a project is loaded/compiled?
For Xcode to run a .xib file inside the project folder, You can just open your xcode, add existing file and it is there.
I think the problem why the old project still runs is that it builds incrementally. That means when it builds the first time, the .xib file was there, and when it build the second time, it doesn't need to add and build the .xib file any more. So, in the second build, even if you delete and move out the .xib file, I think it still can build
Seems a 'sloppy copy' for whatever reason (such as a quick backup to try something experimental) of a project folder causes confusion. See this.