chrisjr chrisjr - 1 year ago 116
iOS Question

Loaded the nib but didn't get a UITableView

I have been following this tutorial on YouTube (part 1 and part 2).

I have completed both videos and have hooked up the view controller with the parent view controller using this code:

- (IBAction)searchButtonClicked:(id)sender {
NSLog(@"It works.");

SearchViewController *searchViewControl = [self.storyboard instantiateViewControllerWithIdentifier:@"SearchControllerNav"];

[self presentViewController:searchViewControl animated:YES completion:nil];


This code indeed works since this is the same format that I use for my other modal view controllers, so i know that's not the problem.

Anyway, when I tap on the search button in the view controller, it should pop up the
. However, the app crashes instead and it gives me this error message:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UITableViewController loadView] loaded the "jp7-vt-IdA-view-Jer-xW-qlD" nib but didn't get a UITableView.'

I am using Storyboards for this app.

Is there something that I'm missing? Thank you in advance.

A side question: I'm also getting a warning, saying
Comparison between pointer and integer ('BOOL *' (aka 'signed char *') and 'int')
isFiltered == YES
is shown. Is there anyway to fix it?

Here is the code for


#import <UIKit/UIKit.h>

@interface SearchViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate> {

- (IBAction)cancelButtonTapped:(id)sender;

@property (weak, nonatomic) IBOutlet UISearchBar *mySearchBar;
@property (weak, nonatomic) IBOutlet UITableView *myTableView;

@property (nonatomic, strong) NSMutableArray *itemsInCloudApp;
@property (nonatomic, strong) NSMutableArray *filteredList;
@property BOOL *isFiltered;



#import "SearchViewController.h"

@interface SearchViewController ()


@implementation SearchViewController

@synthesize mySearchBar, myTableView, itemsInCloudApp, filteredList, isFiltered;

- (void)viewDidLoad
[super viewDidLoad];

// Set title.
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
titleLabel.text = @"Search";
titleLabel.adjustsFontSizeToFitWidth = YES;
titleLabel.clipsToBounds = YES;
titleLabel.numberOfLines = 1;
titleLabel.font = [UIFont fontWithName:@"Avenir-Medium" size:18];
titleLabel.textColor = [UIColor blackColor];
titleLabel.autoresizingMask = UIViewAutoresizingFlexibleHeight;
titleLabel.textAlignment = NSTextAlignmentCenter;
[titleLabel sizeToFit];

self.navigationItem.titleView = titleLabel;

// Alloc and init list.
itemsInCloudApp = [[NSMutableArray alloc]initWithObjects:@"", @"", @"", @"", @"", nil];

- (void)didReceiveMemoryWarning
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
// Return the number of sections.
return 1;

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
// Return the number of rows in the section.
if (isFiltered == YES) {
return [filteredList count];
} else {
return [itemsInCloudApp count];

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

// Configure the cell...

if (isFiltered == YES) {
cell.textLabel.text = [filteredList objectAtIndex:indexPath.row];
cell.detailTextLabel.text = [filteredList objectAtIndex:indexPath.row];;
} else {
cell.textLabel.text = [itemsInCloudApp objectAtIndex:indexPath.row];
cell.detailTextLabel.text = [itemsInCloudApp objectAtIndex:indexPath.row];

return cell;

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
if (searchText.length == 0) {
// Set bollean flag
isFiltered = NO;
} else {
// Set boolean flag
isFiltered = YES;

// Alloc and init our fliteredData
filteredList = [[NSMutableArray alloc] init];

// Fast enumeration
for (NSString *name in itemsInCloudApp) {
NSRange nameRange = [name rangeOfString:searchText options:NSCaseInsensitiveSearch];

if (nameRange.location != NSNotFound) {
[filteredList addObject:name];
// Reload tableView
[myTableView reloadData];


-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
[mySearchBar resignFirstResponder];

- (IBAction)cancelButtonTapped:(id)sender {

[self dismissViewControllerAnimated:YES completion:nil];


NOTE: There are a few edits that I made to fit my needs.

Answer Source

have you tried changing your @interface SearchViewController : UITableViewController to @interface SearchViewController : UIViewController

I strongly suspect that either you have not attached your UITableview as View in XIB or your class should be derived UIViewController instead of UITableviewController class..

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download