2011-08-20 84 views
2

(我是初学者)。 我练导航控制器。我试图实现一个简单的计算器。“计划接收信号‘SIGABRT’

我跑在模拟器中的代码。之后,我压将其链接到 “调用addFunction”, “substractFunction”, “multiplyFunction” 或 “divideFunction” 的任何按钮,它坠毁。

调试器标记的main.m

int retVal = UIApplicationMain(argc, argv, nil, nil); 

下面的代码并表示“主题1:编程接收信号:“SIGABR T“。”

有没有人知道如何应对这种情况?谢谢。

下面的代码:

ChangeAppView.h:

#import <UIKit/UIKit.h> 
@class ChangeViewController; 
@interface ChangeAppDelegate : NSObject <UIApplicationDelegate> 
{ 
    UIWindow *window; 
    UINavigationController *navigationController; 
} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) UINavigationController *navigationController; 
@end 

ChangeAppDelegate.m:

#import "ChangeAppDelegate.h" 
#import "ChangeViewController.h" 

@implementation ChangeAppDelegate 
@synthesize window; 
@synthesize navigationController; 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    navigationController = [[UINavigationController alloc] init]; 
    self.window.rootViewController = navigationController; 
    ChangeViewController *changeViewController = [[ChangeViewController alloc] initWithNibName:@"ChangeViewController" bundle:nil]; 
    [navigationController pushViewController:changeViewController animated:YES]; 
    [changeViewController release]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

...

- (void)dealloc 
{ 
    [navigationController release]; 
    [window release]; 
    [super dealloc]; 
} 
@end 

CalculatorViewController.h:

#import <UIKit/UIKit.h> 
@interface CalculatorViewController : UIViewController 
{ 
    IBOutlet UITextField *numberField1; 
    IBOutlet UITextField *numberField2; 
    IBOutlet UILabel *resultLabel; 
} 
@property (nonatomic , retain) IBOutlet UITextField *numberField1; 
@property (nonatomic , retain) IBOutlet UITextField *numberField2; 
@property (nonatomic , retain) IBOutlet UILabel *resultLabel; 
-(IBAction)addFunction:(id)sender; 
-(IBAction)substractFunction:(id)sender; 
-(IBAction)multiplyFunction:(id)sender; 
-(IBAction)divideFunction:(id)sender; 
-(IBAction)clear:(id)sender; 
-(IBAction)backgroundTap:(id)sender; 
@end 

CalculatorViewController.m:

#import "CalculatorViewController.h" 
@implementation CalculatorViewController 
@synthesize numberField1; 
@synthesize numberField2; 
@synthesize resultLabel; 
-(IBAction)addFunction:(id)sender 
{ 
    float a = ([numberField1.text floatValue]); 
    float b = ([numberField2.text floatValue]);  
    resultLabel.text = [NSString stringWithFormat:@"%2.f" , a+b]; 
} 

-(IBAction)substractFunction:(id)sender 
{ 
    float a = ([numberField1.text floatValue]); 
    float b = ([numberField2.text floatValue]); 
    NSString *result = [[NSString alloc] initWithFormat:@"%2.f" , a-b]; 
    resultLabel.text = result; 
    [result release]; 
} 

-(IBAction)multiplyFunction:(id)sender 
{ 
    float a = ([numberField1.text floatValue]); 
    float b = ([numberField2.text floatValue]); 
    resultLabel.text = [[NSString alloc] initWithFormat:@"%2.f" , a*b]; 
} 

-(IBAction)divideFunction:(id)sender 
{ 
    float a = ([numberField1.text floatValue]); 
    float b = ([numberField2.text floatValue]); 
    resultLabel.text = [[NSString alloc] initWithFormat:@"%2.3f" , a/b]; 
} 

-(IBAction)clear:(id)sender 
{ 
    numberField1.text = @""; 
    numberField2.text = @""; 
    resultLabel.text = @""; 
} 

-(IBAction)backgroundTap:(id)sender 
{ 
    [numberField1 resignFirstResponder]; 
    [numberField2 resignFirstResponder]; 
} 

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

- (void)dealloc 
{ 
    [numberField1 release]; 
    [numberField2 release]; 
    [resultLabel release]; 
    [super dealloc]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 
    // Release any cached data, images, etc that aren't in use. 
} 

#pragma mark - View lifecycle 
- (void)viewDidLoad 
{ 
    self.title = @"Calculator"; 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 
@end 
+1

您是否为所有按钮设置了Outlet?在Interface Builder中检查它。 –

+0

是的,我已经完成了。 – lavitanien

+0

将断点设置为IBAction方法之一,并让我知道确切的线。 –

回答

0

看来你的按钮不是按钮。他们似乎是看法。从你的笔尖删除按钮,并在那里放置新的按钮,并将它们链接到我们的IBActions。

+0

如果它们实际上是按钮,则通过第三个检查器(Command-Option-3)在IB中更改它们的类。 – FeifanZ

+0

我已经检查了Identity Inspector。每个按钮都属于“UIButton”类。 – lavitanien

+0

你是如何设置连接的。控制单击按钮,然后将一行拖入.h文件中? – dasdom

1

从上面的例外看来,您的IBA似乎没有正确连接。 正如dasdom提到的那样,删除所有按钮,创建新按钮,然后相应地添加IBAction方法。

还多了一个我在你的代码的认可,在乘除法的事情有自己编写leak.You内存

resultLabel.text = [[NSString alloc] initWithFormat:@"%2.f" , a*b]; 

应该

resultLabel.text = [[[NSString alloc] initWithFormat:@"%2.f" , a*b]autorelease]; 

resultLabel.text = [NSString StringWithFormat:@"%2.f" , a*b]; 

并且在分法中也做了类似的改变。

你为什么链接你的backgroundtap方法?