简体   繁体   English

Xcode错误与UITableView链接视图控制器

[英]Xcode Error with Linking View Controllers with UITableView

I have made an a Tabbed Bar Application in Xcode and the First Tab is Decors. 我在Xcode中创建了一个Tabbed Bar应用程序,第一个选项卡是Decors。 I asked a previous question on integrating a XIB Project into a StoryBoard Tabbed Project. 我问了有关将XIB项目集成到StoryBoard Tabbed项目中的先前问题。

I have Been Successfully in the integration of this, And it works but when I push on one of the Deocrs, Or Table Cells I get the following Error: 我已经成功地集成了它,并且可以工作,但是当我按Deocrs或Table Cell之一时,出现以下错误:

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

If I put the Original Alert into my project The cell linking starts to work again. 如果我将原始警报放入项目中,则单元格链接将再次开始工作。

Below are pics, links and code to my project, So you can see how it works 以下是我的项目的图片,链接和代码,因此您可以看到它的工作原理

StoryBoard Project 故事板项目

XIB Project XIB项目

在此处输入图片说明

在此处输入图片说明

DecorsViewController_iPhone.h DecorsViewController_iPhone.h

#import <UIKit/UIKit.h>

@interface DecorsViewController_iPhone : UIViewController

{
IBOutlet UITableView *tableViewDecors;
NSArray *sitesArray;
NSArray *imagesArray;
}


@property (nonatomic, retain) UITableView *tableViewDecors;
@property (nonatomic, retain) NSArray *sitesArray;
@property (nonatomic, retain) NSArray *imagesArray;


@end

DecorsViewController_iPhone.m DecorsViewController_iPhone.m

 #import "DecorsViewController_iPhone.h"
 #import "SelectedCellViewController.h"

@interface DecorsViewController_iPhone ()

@end

@implementation DecorsViewController_iPhone

@synthesize tableViewDecors;
@synthesize sitesArray;
@synthesize imagesArray;

 #pragma mark - View lifecycle

 // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
  - (void)viewDidLoad {

// Load up the sitesArray with a dummy array : sites
NSArray *sites = [[NSArray alloc] initWithObjects:@"a", @"b", @"c", @"d", @"e", @"f", @"g", @"h", nil];
self.sitesArray = sites;
//[sites release];

UIImage *active = [UIImage imageNamed:@"a.png"];
UIImage *ae = [UIImage imageNamed:@"b.png"];
UIImage *audio = [UIImage imageNamed:@"c.png"];
UIImage *mobile = [UIImage imageNamed:@"d.png"];
UIImage *net = [UIImage imageNamed:@"e.png"];
UIImage *photo = [UIImage imageNamed:@"f.png"];
UIImage *psd = [UIImage imageNamed:@"g.png"];
UIImage *vector = [UIImage imageNamed:@"h.png"];

NSArray *images = [[NSArray alloc] initWithObjects: active, ae, audio, mobile, net, photo, psd, vector, nil];
self.imagesArray = images;
//[images release];

[super viewDidLoad];
}


#pragma mark - Table View datasource methods

// Required Methods

// Return the number of rows in a section
- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section {
return [sitesArray count];
}

// Returns cell to render for each row
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"CellIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}

// Configure cell

NSUInteger row = [indexPath row];

// Sets the text for the cell
//cell.textLabel.text = [sitesArray objectAtIndex:row];

// Sets the imageview for the cell
cell.imageView.image = [imagesArray objectAtIndex:row];

// Sets the accessory for the cell
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

// Sets the detailtext for the cell (subtitle)
//cell.detailTextLabel.text = [NSString stringWithFormat:@"This is row: %i", row + 1];

return cell;
 }

// Optional

// Returns the number of section in a table view
-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}

#pragma mark -
#pragma mark Table View delegate methods

// Return the height for each cell
-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 78;
}

// Sets the title for header in the tableview
-(NSString *) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section     {
return @"Decors";
 }

// Sets the title for footer
-(NSString *) tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section     {
return @"Decors";
}

// Sets the indentation for rows
-(NSInteger) tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath {
return 0;
}


// Method that gets called from the "Done" button (From the @selector in the line - [viewControllerToShow.navigationItem setRightBarButtonItem:[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissView)] autorelease]];)
- (void)dismissView {
[self dismissViewControllerAnimated:YES completion:NULL];
}

// This method is run when the user taps the row in the tableview
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];

SelectedCellViewController *viewControllerToShow = [[SelectedCellViewController alloc] initWithNibName:@"SelectedCellViewController" bundle:[NSBundle mainBundle]];
[viewControllerToShow setLabelText:[NSString stringWithFormat:@"You selected cell: %d - %@", indexPath.row, [sitesArray objectAtIndex:indexPath.row]]];
[viewControllerToShow setImage:(UIImage *)[imagesArray objectAtIndex:indexPath.row]];

[viewControllerToShow setModalPresentationStyle:UIModalPresentationFormSheet];
[viewControllerToShow setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
[viewControllerToShow.navigationItem setRightBarButtonItem:[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissView)]];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewControllerToShow];
viewControllerToShow = nil;

    [self presentViewController:navController animated:YES completion:NULL];
navController = nil;

    //  UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Tapped row!"
//                                            message:[NSString stringWithFormat:@"You tapped: %@", [sitesArray objectAtIndex:indexPath.row]]
//                                            delegate:nil
//                                            cancelButtonTitle:@"Yes, I did!"
//                                            otherButtonTitles:nil];
//  [alert show];
//  [alert release];

}

#pragma mark - Memory management

- (void)didReceiveMemoryWarning {
NSLog(@"Memory Warning!");
[super didReceiveMemoryWarning];
}

- (void)viewDidUnload {
self.sitesArray = nil;
self.imagesArray = nil;
[super viewDidUnload];
 }


 //- (void)dealloc {
 //[sitesArray release];
//[imagesArray release];
//  [super dealloc];
//}

@end

SelectedCellViewController.h SelectedCellViewController.h

@interface SelectedCellViewController : UIViewController {
NSString *labelText;
UIImage *image;

IBOutlet UILabel *label;
IBOutlet UIImageView *imageView;
}

@property (nonatomic, copy) NSString *labelText;
@property (nonatomic, retain) UIImage *image;

@end

viewControllerToShow.m viewControllerToShow.m

#import "SelectedCellViewController.h"

@implementation SelectedCellViewController

@synthesize labelText;
@synthesize image;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
}
return self;
}

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

#pragma mark - View lifecycle

 - (void)viewDidLoad {
[super viewDidLoad];
[label setText:self.labelText];
[imageView setImage:self.image];
}

- (void)viewDidUnload {
self.labelText = nil;
self.image = nil;
//[label release];
// [imageView release];
[super viewDidUnload];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

 @end

在身份检查器中检查“将在单击时显示的控制器” .XIB继承的类。似乎您尚未设置“将要显示的” XIB的类以及同一XIB的视图出口。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM