为什么我的Objective-C代码抛出异常?

时间:2012-06-06 06:23:44

标签: iphone objective-c ios xcode ios4

我是Objective-C的新手,我正在尝试编写iPhone应用程序。

这是我的代码:

头文件:

#import <UIKit/UIKit.h>

@interface TutorialViewController : UIViewController{
    UILabel *labelText;
    UIImageView *imageView;
}
@property(nonatomic,retain) IBOutlet UILabel *labelText;
@property(nonatomic,retain) IBOutlet UIImageView *imageView;

-(IBAction) click:(id) sender;

@end

这是实施:

#import "TutorialViewController.h"

@implementation TutorialViewController
@synthesize labelText;
@synthesize imageView;

-(void) click:(id)sender {
    imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"1.png"]];
    NSString *titleOfButton = [sender titleForState:UIControlStateNormal];
    NSString *newText = [[NSString alloc]initWithFormat:@"%@",titleOfButton];
    // Change Image When Clicking Color Button
    if([titleOfButton isEqualToString:@"Blue"]){
        NSLog(@"Blue");
        UIImage *image = [UIImage imageNamed:@"1.png"];
        imageView.image = image;
        [image release];
    }else{
        UIImage *image = [UIImage imageNamed:@"2.png"];
        imageView.image = image;
        [image release];
        NSLog(@"Else");
    }
    labelText.text = newText;
    [newText release];
}
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}
#pragma mark - View lifecycle
- (void)viewDidUnload
{
    [super viewDidUnload];
    self.labelText = nil;
}
-(void) dealloc{
    [labelText release];
    [imageView release];
    [super dealloc];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end

当我启动应用程序时,它会抛出异常:

'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "TutorialViewController" nib but the view outlet was not set.'

任何人都可以帮我处理我的代码吗?

另外,你能不能告诉我代码中那些糟糕的书面行为。

非常感谢!

3 个答案:

答案 0 :(得分:3)

将Xib内的根UIView连接到文件所有者的视图。

enter image description here

答案 1 :(得分:1)

打开.xib文件,然后在Objects中单击View,然后单击Connections Inspector,然后单击Control +单击Referencing Outlets中的圆圈并将其拖动到File的Owner并从弹出菜单中选择视图.... :)

Connecting Outlets

EDIT:

您的视图是主要视图,无论您将放入其中还是层次结构中,都将自动显示。正如您在其中使用UIImageView(您可以在对象中看到视图和对象的层次结构,列在PlaceHolders下面的xib)。当您将UIView(父视图)连接到文件的所有者时。它显示了主视图中包含的所有其他视图。因此,当您将主视图与文件所有者连接时,它解决了您的问题。

答案 2 :(得分:0)

嗯,错误信息似乎很清楚:

  

加载了“TutorialViewController”笔尖,但视图插座没有   集'。

检查TutorialViewController笔尖上的插座。似乎视图插座没有任何连接。要解决此问题,请将顶级视图连接到插座(控制拖动)。