Проблема с контроллером навигации при установке заголовка

#iphone #uitableview #uinavigationcontroller

#iPhone #uitableview #uinavigationcontroller

Вопрос:

Я хочу сделать навигацию с 3 уровнями. Я создаю корневой контроллер и заполняю таблицу данными. Но когда я касаюсь какой-либо ячейки, происходит сбой моего приложения. Это часть моего кода:

NavAppDelegate.h

 #import <UIKit/UIKit.h>

@interface NavAppDelegate : NSObject <UIApplicationDelegate> {

}

@property (nonatomic, retain) IBOutlet UIWindow *window;

@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;

@end
  

NavAppDelegate.m

импортируйте «NavAppDelegate.h»

 @implementation NavAppDelegate

@synthesize window=_window;

@synthesize navigationController=_navigationController;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    // Add the navigation controller's view to the window and display.
    self.window.rootViewController = self.navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}

 - (void)dealloc
{
    [_window release];
    [_navigationController release];
    [super dealloc];
}

@end 
  

RootViewController.h

 #import <UIKit/UIKit.h>
@class SubCategory;

@interface RootViewController : UITableViewController <UITableViewDelegate,          UITableViewDataSource> {
    SubCategory *subCategories;
}

@property (nonatomic, retain) SubCategory *subCategories;

@end
  

RootViewController.m

 #import "RootViewController.h"
#import "SubCategory.h"
#import "OffersViewController.h"

@implementation RootViewController

@synthesize subCategories;

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
      // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.title  = @"Sub Categories";

    NSString *jsonArray = [NSString stringWithFormat:@"{ "
                       @" "sub-categories": { "
                       @" "parent": "1", "
                       @" "count": "2", "
                       @" "sub-category": [{ "
                       @" "id": "1", "
                       @" "name": "Buy" "
                       @" }, "
                       @" { "
                       @" "id": "2", "
                       @" "name": "Sell" "
                       @" }] "
                       @" } "
                       @" }"];

    SubCategory* categories = [[SubCategory alloc] init];

    [categories parseJSON:jsonArray];

    subCategories = categories;
}



- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{
return [subCategories.subCategoryName count];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    UITableViewController * offers = [[OffersViewController alloc] initWithNibName:@"OffersView"  bundle:nil];

    //offers.title = [NSString stringWithFormat:@"%@", [subCategories.subCategoryName objectAtIndex:indexPath.row]];

    [self.navigationController pushViewController:offers animated:YES];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cachedCell"];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] init] autorelease];
    }

    cell.textLabel.text = [subCategories.subCategoryName objectAtIndex:indexPath.row];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

return cell;
}

@end
  

OffersViewController.h

 #import <UIKit/UIKit.h>

@interface OffersViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource>{

}

@end
  

OffersViewController.m

 #import "OffersViewController.h"

@implementation OffersViewController

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
    // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad]; 
}


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

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
    return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cachedCell"];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] init] autorelease];
    }

    cell.textLabel.text = @"niki";
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    return cell;
}
  

Исключением является:

 Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "OffersView" nib but the view outlet was not set.'
  

Ответ №1:

В поле «владелец вашего файла xib» для вашего файла установите выход view на view.

OffersViewController в вашем случае вид s не задан.

Найдите view outlet в OffersViewController File owner и установите для него вид в Interface Builder, как показано.

Комментарии:

1. Большое спасибо за эту работу :)) Но теперь у меня другая проблема. Я включаю zombie, и он печатает *** -[UITableViewController TableView:numberOfRowsInSection:]: сообщение, отправленное освобожденному экземпляру 0x4e42be0` Но я не освобождал какой-либо этот объект

2. Я надеюсь, что вы сохранили свой табличный вид.