Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What can the "Object" in Storyboard's Object Library do?

Short Question

There is a thing called Object in XCode's interface builder's Object Library. I wonder what kind of task can be achieved by using this "Object".

Be specific, it is an NSObject in Storyboard (or xib). It's described as follow:

Provides a template for objects that are not directly available in Interface Builder. You can turn this object into an instance of any class using the custom class inspector.

Long Question

I'm trying to build a UITableViewController along with a UISearchController. Since they both require implement the UITableViewDelegate and UITableViewDatasource in their delegate, I wish I can assign the delegate of UISearchController to an Object other than the Main UITableViewController.

I'm looking for a way to achieve this in Storyboard, rather than assign the delegate manually in viewDidLoad. Especially, by figuring out how the Object work in Storyboard.

I understand that I can distinguish them by exam the UITableView's parents. But it is always good to separate the logic into different objects. It will be easier to implement, better efficiency, better structured and possible to be reused.

Thanks in advance.

What I have tried

  • Put an Object at the same level of the UITableViewController in the Storyboard (You cannot put the Object within another UIViewController).
    Link it with an @property (nonatomic, weak) IBOutlet NSObject * in the UITableViewController.
    The NSObject * turns out to be a nil pointer when I print it in viewDidLoad. No luck.
  • By changing the property to @property (nonatomic, strong), it become a UICustomObject instead of nil. Seems I'm on the right track.
like image 956
Greg Wang Avatar asked Jul 22 '12 01:07

Greg Wang


People also ask

What is object library Xcode?

Xcode has more than one library. The Object Library contains the UI elements you'll be adding in Interface Builder, but there are also File Template, Code Snippet, and Media libraries that can be activated by clicking the icons immediately above the Library area.

Where is the object library in Xcode?

In Xcode 13, the Object library is hidden by default. You have to click the + button at the top menu, as displayed in figure 3-14, to make it appear as a floating window. The Object library contains all the available UI objects such as button, label, image view for you to design your user interface.

How do I dock a library object in Xcode?

The trick is to press Option key when you drag something for the first (!) time. It will keep the window docked in the same place until it's closed. Next time you open library use Ctrl + Shift + Option + L.


1 Answers

As you note, Object makes it so an object of any class, including your own custom class ,is instantiated when the XIB/Storyboard is loaded. The fact that you're getting a UICustomObject indicates that the XIB/Storyboard loading machinery either doesn't know what class the object should be, or can't find the class (via runtime lookup) you've specified.

The solution is to make sure you specify the right class for the Object in the custom class inspector:

enter image description here

Then of course you also need to make sure that the implementation file for the class in question is in your project and is included in your target.

Finally, it's correct to use strong for the IBOutlet pointing to your custom object, because it's a top level object and top level objects should be referenced using strong properties. (If you're really curious, Mike Ash has a good article about the specifics of XIB/Storyboard outlet memory management, including the differences between OS X and iOS in this regard.)

like image 174
Andrew Madsen Avatar answered Oct 12 '22 23:10

Andrew Madsen