objective-c选项卡式应用程序,线程1信号:SIGABRT

objective-c选项卡式应用程序,线程1信号:SIGABRT,objective-c,cocoa-touch,uikit,Objective C,Cocoa Touch,Uikit,我正在用xCode从选项卡式应用程序模板编写一个应用程序。 如果没有任何代码,应用程序将切换选项卡,不会出现任何问题 在向第一个视图控制器添加代码后,我在尝试切换选项卡时出错 以下是错误消息: secondViewController.h: @interface TriSecondViewController : UIViewController @property (weak, nonatomic) IBOutlet UITextField *sines1; @property (weak,

我正在用xCode从选项卡式应用程序模板编写一个应用程序。 如果没有任何代码,应用程序将切换选项卡,不会出现任何问题

在向第一个视图控制器添加代码后,我在尝试切换选项卡时出错

以下是错误消息:

secondViewController.h:

@interface TriSecondViewController : UIViewController
@property (weak, nonatomic) IBOutlet UITextField *sines1;
@property (weak, nonatomic) IBOutlet UITextField *sines2;
@property (weak, nonatomic) IBOutlet UITextField *sines3;
- (IBAction)solve2:(id)sender;
@property (weak, nonatomic) IBOutlet UILabel *angleA;
@property (weak, nonatomic) IBOutlet UILabel *sideA;
@property (weak, nonatomic) IBOutlet UILabel *angleB;
@property (weak, nonatomic) IBOutlet UILabel *sideB;
@property (weak, nonatomic) IBOutlet UILabel *angleC;
@property (weak, nonatomic) IBOutlet UILabel *sideC;

@property (weak, nonatomic) IBOutlet UISegmentedControl *segControl;
- (IBAction)aassas:(id)sender;
@property (weak, nonatomic) IBOutlet UILabel *sine1;
@property (weak, nonatomic) IBOutlet UILabel *sine2;
@property (weak, nonatomic) IBOutlet UILabel *sine3;

@end
firstViewController.m: @接口TriFirstViewController()

secondViewController.m:

@interface TriSecondViewController ()

@end

@implementation TriSecondViewController
@synthesize sine1;
@synthesize sine2;
@synthesize sine3;
@synthesize angleA;
@synthesize sideA;
@synthesize angleB;
@synthesize sideB;
@synthesize angleC;
@synthesize sideC;
@synthesize segControl;
@synthesize sines1;
@synthesize sines2;
@synthesize sines3;

BOOL mode = NO;

- (void)viewDidLoad
{
     [super viewDidLoad];
     // Do any additional setup after loading the view, typically from a nib.
}

- (void)viewDidUnload
{
    [self setSines1:nil];
    [self setSine2:nil];
    [self setSines3:nil];
    [self setAngleA:nil];
    [self setAngleB:nil];
    [self setAngleC:nil];
    [self setSideA:nil];
    [self setSideB:nil];
    [self setSideC:nil];
    [self setSine1:nil];
    [self setSine2:nil];
    [self setSine3:nil];
    [self setSegControl:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
    } else {
        return YES;
    }
}

- (IBAction)solve2:(id)sender 
{
    if (mode)
    {
        double aa = [self.sines1.text doubleValue]; 
        double ab = [self.sines2.text doubleValue];
        double ac = 180 - aa - ab;
        double sa = [self.sines3.text doubleValue];
        double sb;
        double sc;

        //convert degrees to radians
        aa = (aa * (M_PI/180));
        ab = (ab * (M_PI/180));
        ac = (ac * (M_PI/180));

        sb = (sa/sin(aa))*sin(ab);
        sc = (sa/sin(aa))*sin(ac);

        self.angleA.text = [NSString stringWithFormat: @"%.2lf", aa];
        self.angleB.text = [NSString stringWithFormat: @"%.2lf", ab];
        self.angleC.text = [NSString stringWithFormat: @"%.2lf", ac];
        self.sideA.text = [NSString stringWithFormat: @"%.2lf", sa];
        self.sideB.text = [NSString stringWithFormat: @"%.2lf", sb];
        self.sideC.text = [NSString stringWithFormat: @"%.2lf", sc];
    }

    if (!mode) 
    {
        double aa = [self.sines1.text doubleValue];
        double ab;
        double ac;
        double sa = [self.sines2.text doubleValue];
        double sb = [self.sines3.text doubleValue];
        double sc;

        aa = (aa * (M_PI/180));

        ab = asin(sb*(sin(aa)/sa));
        ac = 180 - aa - ab;

        ac = (ac * (M_PI/180));

        sc = (sa/sin(aa))*sin(ac);

        self.angleA.text = [NSString stringWithFormat: @"%.2lf", aa];
        self.angleB.text = [NSString stringWithFormat: @"%.2lf", ab];
        self.angleC.text = [NSString stringWithFormat: @"%.2lf", ac];
        self.sideA.text = [NSString stringWithFormat: @"%.2lf", sa];
        self.sideB.text = [NSString stringWithFormat: @"%.2lf", sb];
        self.sideC.text = [NSString stringWithFormat: @"%.2lf", sc];
    }
}

- (IBAction)aassas:(id)sender 
{
    switch (self.segControl.selectedSegmentIndex) {
        case 0:
            self.sine1.text = @"Angle A/n";
            self.sine2.text = @"Angle B/n";
            self.sine3.text = @"Side A/n";
            mode = NO;
            break;

        case 1:
            self.sine1.text = @"Angle A/n";
            self.sine2.text = @"Side A/n";
            self.sine3.text = @"Side B/n";
            mode = YES; 
            break;

        default:
            break;
    }
}
@end

此错误的常见原因是,在xib文件或故事板的某个地方,您有一个从某个控件或视图到一个名为“solve”的IBOutlet的链接,但您不再有该链接所指向的类的代码中定义的属性或变量。

UIViewController符合NSKeyValueCoding协议,所以,当为未定义的键设置一个值时,您不会覆盖

-(void)setValue:(id)unfinedkey:(NSString*)键的值

这将产生NSUndefinedKeyException异常

[self setTriText1:nil];
[self setTriText2:nil];
[self setLegA:nil];
[self setLegB:nil];
[self setHypotenuse:nil];
[self setAngleA:nil];
[self setAngleB:nil];
[self setButton1:nil];
也许在这里可以带来例外。你为什么不这样写呢:

self.triText1 = nil;
self.triText2 = nil;
self.legA = nil;

对于sencondViewContrlloer,如果您显式使用“set方法”并编写错误的方法,则会发生类似的异常。

我认为您可以在Xcode debugger或gdb中获得详细信息,调用堆栈是非常重要的信息。
我这样做了,结果发现tableviewcell的标识符是错误的。

您在firstViewController中编写了什么代码?请把它寄出去。!xib文件在哪里,故事板中的所有链接都很好。如果你有一个故事板,你可能没有xib文件。你有没有在这个项目中做过一个叫做“解决”的事情?(因为应用程序认为是你做的,而且在某个地方仍然有对它的引用。)是的,我将它们重命名为不同的名称,并从storyboard@TPLeavitt:显然,您仍然有一个包含
solve
插座并已连接的xib或故事板。问题中的xib或故事板包含TriSecondViewController或由TriSecondViewController拥有。右键单击文件列表中的.storyboard文件,然后从弹出菜单中选择“打开为->源代码”。然后在显示的XML源中搜索单词“solve”。如果您找到了它,上下文应该会提示您它隐藏在哪里。如果不存在,则会出现一些不同的问题,表现出相同的症状。没有理由覆盖
setValue:forundeindekey:
,点语法和消息语法的作用完全相同(发送
setwhater:
消息)。我知道,我只是推荐一个简单的使用方法,防止写错方法,你的投票有点不公平
@interface TriSecondViewController ()

@end

@implementation TriSecondViewController
@synthesize sine1;
@synthesize sine2;
@synthesize sine3;
@synthesize angleA;
@synthesize sideA;
@synthesize angleB;
@synthesize sideB;
@synthesize angleC;
@synthesize sideC;
@synthesize segControl;
@synthesize sines1;
@synthesize sines2;
@synthesize sines3;

BOOL mode = NO;

- (void)viewDidLoad
{
     [super viewDidLoad];
     // Do any additional setup after loading the view, typically from a nib.
}

- (void)viewDidUnload
{
    [self setSines1:nil];
    [self setSine2:nil];
    [self setSines3:nil];
    [self setAngleA:nil];
    [self setAngleB:nil];
    [self setAngleC:nil];
    [self setSideA:nil];
    [self setSideB:nil];
    [self setSideC:nil];
    [self setSine1:nil];
    [self setSine2:nil];
    [self setSine3:nil];
    [self setSegControl:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
    } else {
        return YES;
    }
}

- (IBAction)solve2:(id)sender 
{
    if (mode)
    {
        double aa = [self.sines1.text doubleValue]; 
        double ab = [self.sines2.text doubleValue];
        double ac = 180 - aa - ab;
        double sa = [self.sines3.text doubleValue];
        double sb;
        double sc;

        //convert degrees to radians
        aa = (aa * (M_PI/180));
        ab = (ab * (M_PI/180));
        ac = (ac * (M_PI/180));

        sb = (sa/sin(aa))*sin(ab);
        sc = (sa/sin(aa))*sin(ac);

        self.angleA.text = [NSString stringWithFormat: @"%.2lf", aa];
        self.angleB.text = [NSString stringWithFormat: @"%.2lf", ab];
        self.angleC.text = [NSString stringWithFormat: @"%.2lf", ac];
        self.sideA.text = [NSString stringWithFormat: @"%.2lf", sa];
        self.sideB.text = [NSString stringWithFormat: @"%.2lf", sb];
        self.sideC.text = [NSString stringWithFormat: @"%.2lf", sc];
    }

    if (!mode) 
    {
        double aa = [self.sines1.text doubleValue];
        double ab;
        double ac;
        double sa = [self.sines2.text doubleValue];
        double sb = [self.sines3.text doubleValue];
        double sc;

        aa = (aa * (M_PI/180));

        ab = asin(sb*(sin(aa)/sa));
        ac = 180 - aa - ab;

        ac = (ac * (M_PI/180));

        sc = (sa/sin(aa))*sin(ac);

        self.angleA.text = [NSString stringWithFormat: @"%.2lf", aa];
        self.angleB.text = [NSString stringWithFormat: @"%.2lf", ab];
        self.angleC.text = [NSString stringWithFormat: @"%.2lf", ac];
        self.sideA.text = [NSString stringWithFormat: @"%.2lf", sa];
        self.sideB.text = [NSString stringWithFormat: @"%.2lf", sb];
        self.sideC.text = [NSString stringWithFormat: @"%.2lf", sc];
    }
}

- (IBAction)aassas:(id)sender 
{
    switch (self.segControl.selectedSegmentIndex) {
        case 0:
            self.sine1.text = @"Angle A/n";
            self.sine2.text = @"Angle B/n";
            self.sine3.text = @"Side A/n";
            mode = NO;
            break;

        case 1:
            self.sine1.text = @"Angle A/n";
            self.sine2.text = @"Side A/n";
            self.sine3.text = @"Side B/n";
            mode = YES; 
            break;

        default:
            break;
    }
}
@end
[self setTriText1:nil];
[self setTriText2:nil];
[self setLegA:nil];
[self setLegB:nil];
[self setHypotenuse:nil];
[self setAngleA:nil];
[self setAngleB:nil];
[self setButton1:nil];
self.triText1 = nil;
self.triText2 = nil;
self.legA = nil;