#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. Я надеюсь, что вы сохранили свой табличный вид.