objective-c选项卡式应用程序,线程1信号:SIGABRT
我正在用xCode从选项卡式应用程序模板编写一个应用程序。 如果没有任何代码,应用程序将切换选项卡,不会出现任何问题 在向第一个视图控制器添加代码后,我在尝试切换选项卡时出错 以下是错误消息: secondViewController.h: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,
@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;