This is quite a major problem: the Outlets are not appearing in IB.
To reproduce:
1) I declare a variable to be IBOutlet, for example in my view controller's .h file
#property (nonatomic, strong) IBOutlet UILabel* testlabel;
2) I open the storyboard, click on the viewcontroller.
- If this is a new project, there is no "Outlets" list.
- If this is an old project with outlets already defined, the "Outlets" list contains the previous outlets, but not the one I've added.
Has anyone had the same problem. This is really important, as I can't basically proceed unless I stop using Outlets. I can't find any info about it on the release notes.
EDIT I'm adding a video on youtube showing the problem, in case I haven't explained it properly. If I'm forgetting something obvious, I'm happy to be laughed at :) That said, I've always been following these same actions and Outlets have always been in the list.
EDIT 2 For clarity, I've removed the ivar declaration as it seemed to get most of the attention.
Outlets on Youtube
EDIT 3 Ok I seem to be hitting a problem seen previously on this question and this other question. Basically, if I open the custom class drop-down, I see only some "standard" classes, such as UIViewController. If I select any of these, I get the Outlets. For example, for UIViewController I always have that view->View. However, my project's classes are not in the drop-down. Entering the name manually seems to work, but in fact it's not. There must be some indexing issue (except I've already deleted everything from
~/Library/Developer/Xcode/DerivedData/
without success. If you wish to try, I've put my code on GitHub. This doesn't show the Outlets for me, but it does for a number of other people - so it's not a "bug" with the code strictly speaking. It's more an XCode issue. Any help would be welcome!
EDIT 4 I think here's the problem, pretty much: look on the right. The drop-down menu doesn't show the "ViewController.h" class. If I enter it manually, it seems to recognise it but in fact I suspect it doesn't. In previous times, I was always seeing the full list of my project's classes in the drop-down menu.
I've found a "solution", or workaround. Deleting the XCode data is not enough, and it's not enough to just restart it. The following sequence makes the Outlets magically re-appear and work properly:
Clean project
Close XCode
Delete all contents of ~/Library/Developer/Xcode/DerivedData/
Restart MacOs
By doing this, when you re-open XCode and it reindexes, it will show the outlets as expected.
just declare the IBOutlet like this:
#property (nonatomic, strong) IBOutlet UILabel* testlabel
Maybe a very dumb one, but have you tried Clean Project Folder, then deleting DerivedData (while Storyboard is not open), immediately quit Xcode, and opening up Xcode again, then building your project?
I ran into a similar problem, but it was due to a bug in Xcode (8.2) where Interface Builder doesn't show outlets in the Connection Inspector if those outlets have been declared with a _Nullable type annotation for Swift compatibility.
Using nullable inside #property's parentheses appears to work around the problem.
(I know the original poster's problem did not use type annotations or Xcode 8 so was slightly different, but the question summary matched my internet search so I mention this for future searchers.)
My project is using a storyboard that has been working great so far. However, just yesterday something very strange happened - here are the details:
Any new IBOutlets or IBActions I create aren't listed under "Referencing Outlets" in the Connections inspector.
If I remove any of my existing referencing connections in the storyboard - they disappear completely from the list and I can't re-connect them.
If I try to set the custom class under the identity inspector, I can't see any of my classes being pre-populated or appearing in the dropdown list.
I have tried cleaning, cleaning derived data, quitting XCode and restarting my computer but no luck! This problem hasn't affected any other projects though.
If anyone has any thoughts on how this could be resolved that would be amazing!
Kind regards,
Jeremy
I was able to fix the problem by restarting my computer again!
I think that you must need to clean your build folder and then restart.
Thanks guys for your comments!
I was looking for this answer to everywhere! None of this solution worked for me!
All you have to do is:
Step 1: Check your selected class have the right "Subclass" when you have created this class for a storyboard reference!
Step 2: If the subclass is wrong, delete this class and create it again with right Subclass, for example it can be UIView or UITabelView or UIViewController or anything else!
I have recreated this class with right subclasses and it worked for me
The new Xcode 14 has a toolchain feature which we recently used .. and I ran into this same problem without noticing I have to change it back .. so if like me you changed the toolchain for some purpose change it back to Xcode and force restart Xcode
I copied FairListViewController class to my project. I renamed it to ExibitorViewController.
There is an IBOutlet called
UITableView *fairListTableView;
in nib file. I change it with
UITableView *exibitorTableView;
Now every thing works fine. But one thing I notice that the previous tableView IBOutlet (which is fairListTableView here)" name still listed on the
ExibitorViewController.xib > File's Owner > Connection Inspector > OutLets section.
Though it was unconnected and don't bother at all. To erase it, I have to go to the nib xml file. I've done the following steps:
right click on ExibitorViewController.xib
File > Open As > Source Code
search for the (Control+F) fairListTableView
delete the related code from there.
The code I found is :
<string>fairListTableView</string>
<object class="IBToOneOutletInfo">
<string key="name">fairListTableView</string>
<string key="candidateClassName">UITableView</string>
</object>
But after saving and cleaning the project that IBOutlet still shows up there. If anyone knows the tricks to remove it, please share with me.
Sometimes I have the same problem. Make sure you remove it from the Interface Builder, Product -> Clean and then restart Xcode.
That usually does the trick for me
Have you tried removing it in Interface Builder, instead of changing the .xib XML? XCode most likely saves what's present in Interface Builder when quitting, so it may overwrite any changes you did manually.
I found that I needed to delete the DerivedData folder for my project to get the "cached" IB references to be removed. Clean and restart was not working.
Using Swift and xCode 7.2. YMMV
Location ~/Library/Developer/Xcode/DerivedData/ More info about this is here.
I'm trying to create a nib that contains a view that will be embedded in a TableViewCell. I've created the interface and implementation files, ResultCell.h and ResultCell.m. They're stock, out-of-the-box, no code changes.
I then create an empty XIB file, and drag a UIView onto it. Then I click File's Owner, and set the type to ResultCell. I click the view, and set its class to also be ResultCell.
Here are the problems I have:
When using the Assistant Editor view (which I live in), the ResultCell.h file doesn't appear when I'm viewing the ResultCell.xib file. I have to force it to load by clicking on Automatic and selecting the file.
When I drop a label in the view, and then Ctrl+Click and drag to the .h to create an outlet, I get this error message: "Could not insert new outlet connection: Could not find any information about the class named ResultCell."
I've tried creating and re-creating the view, and it's just not working, and I've started to lose my patience. Any help would be very, very appreciated!
I got into a similar state just today. It was very odd: I could attach any XIB (new or existing) to any already-existing ViewController class in the project, but I could not create a new ViewController and have it attach properly to any XIB. The "assistant" functionality didn't work, nor did the IB-to-headerfile-connection functionality.
Closing the project and re-opening did not fix it.
Quitting XCode and restarting did not fix it.
Creating a new project and testing the functionality worked fine, which led me to believe there was something corrupt in some cache somewhere.
My solution
Close your project.
Go to the ~/Library/Developer/XCode/DerivedData folder and REMOVE all subfolders there referencing the project you are working on.
Open your project in XCode. The problem should be fixed now.
Incidentally, just running a full clean did not seem to clear things up. I had to trash the derived data. I'm certain I got into this position because of git games I was playing, but I had no idea how to get out, because even switching back to earlier git revisions didn't help. (That was a big clue also that it was something untracked by the project itself.)
This might not work for your specific issue, but occasionally I get that error when working with newly created nibs. Deleting and recreating the nibs and View Controllers with the same names as before didn't resolve the issue, but relaunching Xcode did.
I just had this problem and restarting Xcode did not fix it. I removed the class files from the project then added them back in and it started working.
I had the very same issue. And I tried :
Restarting Xcode
Deleting Derived Data
And many more
None of that worked. What worked for me was simply to :
Remove 'suspect' class files from Project (just remove References, huh?)
Re-add them to the project
And done!
If restarting Xcode doesn't work of you, I have found that Toggling the new .m file out and back into the target membership works.
This helped me out:
from the project file Panel (left side) select the xib file that is broken.
Click on the Files Owner icon from the editor view.
from the properties Panel (right side) select the third tab (at the top)
specify the "Custom Class"
If you do not see a "panel", please have a look at the top-right corner of the window and enable the proper "view" buttons. If you don't see the "view" buttons then click on the top-right most capsule button.
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.It will fix the issue.
Don't worry, you will get all your connections back.
I encountered the same problem today. Restarting XCode did not fix the problem for me. I was able to get things back to normal by using "Delete" option of "Derived Data" of the project that can be found under Organizer. Organizer says that, "Derived Data includes index, build output and logs". I guess that either index or build output was causing this issue.
in XCode go to organizer, click project, click delete derived data... than clean the project
In my case it helped to make a "fake change" (just a space) to the according header file.
ResultCell should be a subclass of UITableViewCell
You should not drag a UIView onto the empty canvas, you should drag a UITableViewCell
You should select the cell and change it to be your subclass
The owner is most often a controller with an outlet to the cell
Everytime you want to load a new cell, call:
[[NSBundle mainBundle] loadNibNamed:nibName
owner:controllerWithOutletToCell
options:nil]
after loading, use the cell, and set the ivar/outlet to nil, ready for the next load
there are other ways, but this is common
Perhaps what worked for me is this.. (Xcode v4.5)
This did not work
I was trying to control drag into the interface definition of my .h
#interface SearchViewController : UIViewController
#end
This worked (may be that is how it was supposed to work, I did not know it before)
See the open and close brackets. Control drag and drop after the closed bracket.
#interface SearchViewController : UIViewController
{
}
#end
I had a similar problem with a project written in Swift.
What worked for me was setting up the IBOutlet in code like this
#IBOutlet var foo: UIView?
and afterwards connect it to Interface Builder by dragging to the little circle that appeared right next to the code line.
None of the above workarounds resolved the connector issue for me so I shelved my pet project until I came across the following stackoverflow thread:
https://stackoverflow.com/a/15873770/2846800
I had been working on a large project in a previous version of XCode and had turned off indexing. By re-enabling indexing my issue is now fixed:
defaults delete com.apple.dt.XCode IDEIndexDisable
I can now use the D&D features of Interface Builder. I hope this can help others...
This problem seems to be an Xcode bug which creeps up mostly when you replace a file with a new file of the same name. Xcode seems to keep a reference of the older file of the same name.
Anyhow, the way to fix this seems to be:
Clean the project
Click (Your Project) in Project Navigator view. Go to Compile Sources under Build Phases of the target for which you are building. Remove and add back the .m file which is giving you trouble.
Alternatively, in the File Inspector (Utilities view) of the NIB file, under Target Membership, uncheck and check back the target name.
Restart Xcode for good measure.
Of course, deleting and adding back the .m file alone should fix it too.
(Steps 1 and 2 alone fixed it for me.)
If you copied files from other project just make sure you check the 'Add to targets' box
Renaming the class files may unlink them from the XIB. This answer helped me discover this:
Ctrl-Drag from button to method not working. Xcode/Interface Builder
Check that your custom class is set correctly in the Identity Inspector.
Similar symptom, but different cause.
Apparently I hit backspace when the focus was on the assistant view, because one of the standard file template comment lines went from // to / which results in the file not compiling.
Fixing the comment allowed the SDK to parse the file, recognize it as a UIViewController, and add in the outlet.
SO -- if you have this problem, do a build or analyze to see if there are errors that need fixing in your view controller .h file. THEN try the other solutions.
This might be an old topic but just in case anyone has the same issue in future, try deleting the associated .xib,.h and .m files and create new ones. For me, the UIViewController in my .h file wasn't purple and even backspacing and typing it didn't help.
Just put a line between the #implementation and the #synthesize. Most of the answers here have that in common. It worked for me
#implementation
#synthesize
I just tried everything here and nothing worked (using a Developer Preview for Xcode 5).
The only thing that worked for me was to put this incomplete line in my interface file:
#property (nonatomic, weak)
For whatever reason, adding outlets and actions by drag and drop from a .xib worked fine after that.
For me wether cleaning nor deleting the DerivedData solved the problem.
I tried to delete and recreate my UIViewController class several times and got the problem again and again.
Then I recreated the UIViewController class and gave it a different name. This solved the problem for me.
I have had this problem and found a solution not listed above.
In my case, I could see there was something wrong in the class .h file because my custom view controller did not recognise the class : UIViewController (it was in black not purple). All the other custom view controllers had the : UIViewController in purple.
in my case, and possibly yours, I needed to add the class to targets/build phases/compile Sources drop down. The .m needs to be added. All of the other .m's were there but not this one.
Once I added it, the :UIViewController appeared in purple and everything worked fine.
For my case, I have multiple project with some other dependencies. I tried to solve it by deleting derived data or restarting XCode but it couldn't work. In the end, I tried the following method and it works:
Go to target > Build Target Architectures Only > and set both Debug and Release to NO.
Set this for all projects in the workspace and recompile to make sure there is no other errors. Maybe not making sense but somehow did it. During my compilation, I had other issues such as linker errors and symbols not found.
For *.m file of this class view open "Show File Inspector" and unchecking "Target membership" for this project, then do Clean (menu Product->Clean) and checking again "Target membership" for this project
Using Swift, I had a similar problem. I found out that the comments were part of the problem for me.
I leveraged the default view controller, did some work in it, then created a second view controller by copying the entire first one, stripping it down to only viewDidLoad() and renaming the class to TestViewController. Builds worked, code executed. All was good.
When I went to drag a UITextField in to create an outlet, it would not let me. I noticed that my comments still said "ViewController.swift", so I changed the comment text to "TestViewController.swift" and rebuilt. I was able to connect my outlet!
I wonder if what occurred is that the Indexer was reading the comments as well as the class names, and somehow got confused.
Hope this helps someone out there.
I just had to delete the derived data folder. You need to click Window -> Organizer -> Projects -> Delete Derived Data
AND RESTART XCODE.
You should be good to go!
The new class not being part of the "TARGET" is likely the root cause of this, as alluded to by some of these answers.
When creating a new cocoa class, by default the option to add new class to target is by default checked, but should, for any reason, this not be checked when you hit save, you will have this issue.
Any of these workarounds that add the new class to the apps target will work to resolve the problem, and is something that all these 'fixes' have in common.
I think XCode likely has some bugs that causes a new file to, by default, NOT be added to the apps main target. The fix boils down to adding your 'broken' class to the main TARGET
In XCode 7.1, adding the connector at a different point in my source file worked. The error I was getting referred to one of my variables as if it were a class (didn't make any sense). The error stopped occurring when I added the connector below that variable instead of above it.
There is also a diferent reason for the issue ... if you have created new cocoa class file with template other than ios ... i can happen...
The solution would be to delete it and re create it with right template
I had got an iPad application.The ViewContrtoller.xib has got an UIImageView in it. The UIImage of the UIImageView is set through Interface Builder. When I run the application in simulator everything is fine. But when I am trying to run it in iPad the UIImage is not loaded. The message that I am getting is:
HexaPuzzle1.0[3259:207] Could not load the "start.png" image referenced from a nib in the bundle with identifier "com.yourcompany.HexaPuzzle1-0"
2010-12-17 10:57:27.221 HexaPuzzle1.0[3259:207] HexaPuzzle loaded
Any help would be appreciated and will be a great help for me.
The issue has been rectified.
Problem was with the image format. When the image has been edited and saved as PNG-24 everything goes fine.
The application now runs smoothly in simulator and device.
Thanks for all friends who suggested a solution and tried to helped me.
Regards,
Rupesh R Menon
I know it's very late, but this is a solution that also works in Xcode 5, and therefore likely to be useful to people who have this problem in the future.
I have seen a lot of questions like this on the web but none of them seems to have one clear answer. This is, as far as I know, the solution for this problem:
Go to the image in Xcode (no need to re-add or re-generate the
image)
click "show the file inspector"
Make sure the checkbox in the category "Target Membership" is checked. the test check box does not have to be checked to make your app load the image.
The target membership tab looks like this:
if this is already the case, you are working with a broken or damaged file. to rule this out, check if another app (like photoshop) can open your image.
This should do it, hope it helps!
When dragging your start.png file into your project, did you check this option?
I was getting this error in the simulator after upgrading to Xcode 7 / iOS 9 and opening an existing project. The image was present and named correctly, within an XCAssets package.
Turns out the problem was with a parameter within the XCAssets package.
Changing Render As from Default to Original Image solved the problem:
I've had the same problem before. The png file format is not right. Try re-generate the png image file and the problem will be solved.
None of the above worked for me, and the message I got was "could not load the "(null)" image referenced... which means I could not look for the image. Very frustrating. In the end it became a trial and error exercise of going through every xib and storyboard looking for potential conflicts. I finally found it - I had specified a "Selected Image" for a tab bar item which was not needed. As soon as I got rid of that the problem went away.
None of these things work for me. I created a new folder in the projects where I placed the pictures. That worked for me.
This problem was fixed when I changed "add folder reference..." to "add group..." when I import the images to my project. I'd prefer to have folders with live updating, but at least it works now.
Had an image on a XIB (which is replaced by the correct one in code). After finishing this XIB, I renamed the images. So XIB was now referencing a non-existent image.
There is also another potential cause of this problem: If you upgraded to XCode 5 and use both the image asset catalog and "normal" images copied to your project (like you did prior XCode 5). If you then have images with identical names (e.g. "dog.png" and a image set called "dog") it might work in your storyboard and in the simulator, but you'll get this message when run on a real device (where the image will not be shown).
Try moving the images directly to the Resources directory (not in a sub folder)
Make sure the resource isn't too big to be handle.
If you get the error message with the name of the picture, you can search it inside your project and xCode will display immediately the UIImageView with the wrong picture inside UIStoryboard:
Make sure it is included in your Target Membership
Select your "Images.xcassets" file in the file Inspector
Open File Inspector (cmd + opt + 1)
Select your target membership (Usually 1st line)
I had the same problem, but the cause was very different. I was using image sets in the Asset Catalog that varied based on the device idiom: iPad or iPhone.
The framework target they were being added to had been accidentally marked as as having a deployment device type of iPhone, so the images weren't showing up on iPads - they weren't even being copied into the .car file in the framework.
Setting the deployment device type to Universal, as it should have been, solved the problem.
For some reason I was getting error until I put the image in the Assets.xcassets