Xcode 4和“SIGABRT”错误? (仅适用于iphone)

时间:2011-06-18 20:18:12

标签: ios xcode4

我是ios开发和stackoverflow的新手。我确实尝试在发布之前搜索stackoverflow和google。

我构建了一个简单的小应用程序,最初只是留下了一个仅限iPhone的应用程序,但最终还是决定让它变得通用。我愚蠢地说,当我开始了解xcode 4并将其切换为通用然后再返回时,我正在弄乱这些,所以我不得不重新复制项目并再次执行。这次我用通用应用程序启动它。 (不是当我创建它但是在我去项目并在那里选择它之后)它创建了ipad文件夹和mainwindow-ipad.xib文件但当然是空的,因为我还没有做任何事情。我把它设置为基于标签的应用程序,所以我的iphone版本也有firstview和secondview nib文件,但ipad版本没有。我首先在iphone版本中设置它,它工作正常。然后我去铺设了ipad版本(我确实从mainwindow-ipad中删除了第二个标签,因为我不需要它)

然后我创建了一个新的nib文件并将其与“main-ipad.h”和“main-ipad.m”一起放在ipad文件夹中。我复制了我的代码并连接了一切,它在ipad模拟器上运行正常,但现在当我尝试运行iphone模拟器时,我得到“SIGABRT错误。我拍了一个屏幕截图。我不完全理解Objective-c所以我希望有人可以帮助我吗?我可以发布任何代码或任何你需要的东西来帮助我解决这个错误,所以请问。

感谢您的任何帮助和建议!

谢谢!

[好吧我会张贴图片,但我不能,因为我是新用户,而是我发布突出显示的行和xcode的输出]

包含错误的文件代码:

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil); //ERROR IS ON THIS LINE <-----
    [pool release];
    return retVal;
}

[OUTPUT]

2011-06-18 17:32:43.980 Price Assist[445:207] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x4e09cc0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key finallabel.'
*** Call stack at first throw:
(
0   CoreFoundation                      0x00dc35a9 __exceptionPreprocess + 185
1   libobjc.A.dylib                     0x00f17313 objc_exception_throw + 44
2   CoreFoundation                      0x00dc34e1 -[NSException raise] + 17
3   Foundation                          0x00795677 _NSSetUsingKeyValueSetter + 135
4   Foundation                          0x007955e5 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 285
5   UIKit                               0x0021130c -[UIRuntimeOutletConnection connect] + 112
6   CoreFoundation                      0x00d398cf -[NSArray makeObjectsPerformSelector:] + 239
7   UIKit                               0x0020fd23 -[UINib instantiateWithOwner:options:] + 1041
8   UIKit                               0x00211ab7 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168
9   UIKit                               0x000c7628 -[UIViewController _loadViewFromNibNamed:bundle:] + 70
10  UIKit                               0x000c5134 -[UIViewController loadView] + 120
11  UIKit                               0x000c500e -[UIViewController view] + 56
12  UIKit                               0x00038d42 -[UIWindow addRootViewControllerViewIfPossible] + 51
13  Foundation                          0x007955e5 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 285
14  UIKit                               0x00048ff6 -[UIView(CALayerDelegate) setValue:forKey:] + 173
15  UIKit                               0x0021130c -[UIRuntimeOutletConnection connect] + 112
16  CoreFoundation                      0x00d398cf -[NSArray makeObjectsPerformSelector:] + 239
17  UIKit                               0x0020fd23 -[UINib instantiateWithOwner:options:] + 1041
18  UIKit                               0x00211ab7 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168
19  UIKit                               0x0001717a -[UIApplication _loadMainNibFile] + 172
20  UIKit                               0x00017cf4 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 291
21  UIKit                               0x00022617 -[UIApplication handleEvent:withNewEvent:] + 1533
22  UIKit                               0x0001aabf -[UIApplication sendEvent:] + 71
23  UIKit                               0x0001ff2e _UIApplicationHandleEvent + 7576
24  GraphicsServices                    0x00ffc992 PurpleEventCallback + 1550
25  CoreFoundation                      0x00da4944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
26  CoreFoundation                      0x00d04cf7 __CFRunLoopDoSource1 + 215
27  CoreFoundation                      0x00d01f83 __CFRunLoopRun + 979
28  CoreFoundation                      0x00d01840 CFRunLoopRunSpecific + 208
29  CoreFoundation                      0x00d01761 CFRunLoopRunInMode + 97
30  UIKit                               0x000177d2 -[UIApplication _run] + 623
31  UIKit                               0x00023c93 UIApplicationMain + 1160
32  Price Assist                        0x000029a9 main + 121
33  Price Assist                        0x00002925 start + 53
)
terminate called after throwing an instance of 'NSException'

iPhone FirstView nib文件.h代码:

@interface FirstViewController : UIViewController {
    IBOutlet UITextField *dollarinput;
    IBOutlet UITextField *centsinput;
    IBOutlet UIButton *combinevalue;
    IBOutlet UITextField *percentoffinput;
    IBOutlet UILabel *discountlabel;
    IBOutlet UILabel *finallabel;
}  
- (IBAction)calculate:(id)sender;
- (IBAction)backgroundTouched:(id)sender;
- (IBAction)autonext:(id)sender;

iPhone FirstView nib文件.m代码:

//
//  FirstViewController.m
//  Price Assist
//
//  Created by Dustin Schreiber on 6/15/11.
//  Copyright 2011 TheTechSphere.com. All rights reserved.
//

#import "FirstViewController.h"


@implementation FirstViewController

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

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


- (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.
}


- (void)viewDidUnload
{    
[percentoffinput release];
percentoffinput = nil;
[discountlabel release];
discountlabel = nil;
[finallabel release];
finallabel = nil;
[super viewDidUnload];

// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}


- (void)dealloc
{
[percentoffinput release];
[discountlabel release];
[finallabel release];
[super dealloc];
}


- (IBAction)calculate:(id)sender {
if ([centsinput.text length] == 0){
    centsinput.text = @"00";
}
if ([dollarinput.text length] == 0){
    dollarinput.text = @"00";
}
if ([percentoffinput.text length] == 0){
    percentoffinput.text = @"00";
}
double cDollars = [dollarinput.text doubleValue];
double cCents = [centsinput.text doubleValue];
double percentoff = [percentoffinput.text doubleValue] / 100;
NSString *ccDollars = [[NSNumber numberWithFloat:cDollars] stringValue];
NSString *ccCents = [[NSNumber numberWithFloat:cCents] stringValue];
NSString *placeholder = [NSString stringWithFormat:@"%@.%@", ccDollars, ccCents];
double combined = [placeholder doubleValue];
double discount = combined * percentoff;
NSString *discountholder2 =[NSString stringWithFormat:@"%.2f", discount];
discountlabel.text = discountholder2;
double newprice = (combined - discount);
NSString *str = [NSString stringWithFormat:@"%.2f", newprice];
finallabel.text = str;
dollarinput.text = ccDollars;
centsinput.text = ccCents;
percentoffinput.text = [[NSNumber numberWithFloat:percentoff] stringValue];
}

-(IBAction)backgroundTouched:(id)sender
{
[dollarinput resignFirstResponder];
[centsinput resignFirstResponder];
[percentoffinput resignFirstResponder];
}

- (IBAction)autonext:(id)sender {
if ([centsinput.text length ] >= 2) {
    if ([centsinput.text length] > 2) {
        centsinput.text = @"";
    } else {
        //next field
    }
}
}

@end

再次感谢!如果有人对我的代码有任何建议我会爱他们!就像我说的,我是新手,这是我知道的唯一方法。

------------&GT;如果有人想要,我会上传整个项目文件夹。请问。谢谢大家的帮助。我是一个带有xcode的n00b,所以我还没有完全放下它。

Project Zipped

4 个答案:

答案 0 :(得分:2)

在您使用finallabel的地方发布一些代码并尝试调试您的应用,以便在应用崩溃之前告诉我该行。

选项2: 尝试在malloc_error_break中设置BreakPoint,以便我们可以获得有关错误的更多信息。

在XCode中转到Run - &gt;显示 - &gt; BreakPoints(或只是cmd +选项+ B)。然后双击以添加新符号(符号断点)并键入malloc_error_break,然后按Enter键。

现在运行您的应用并粘贴您的控制台文字。

更新如果您需要帮助http://developer.apple.com/library/mac/#recipes/xcode_help-breakpoint_navigator/articles/adding_a_symbolic_breakpoint.html


检查你的InterfaceBuilder中的连接,你可能有错误的fianllabel。 另请检查您的自定义类 - &gt; InterfaseBuilder中的iphone XIB中的类


<强>更新

转到产品 - &gt;清洁。然后跑。

答案 1 :(得分:1)

UIApplicationMain行(argc,argv,nil,NSStringFromClass([AppDelegate class]));只是意味着在程序运行期间抛出异常。这可能包括内存问题和简单的运行时错误。查看目标调试器控制台;它会告诉你错误发生的位置。

打开左上角的“iOS模拟器”菜单 - >重置内容和设置。然后退出iOS模拟器和Xcode,然后重新启动计算机。这将摆脱该过程的另一个实例。

这可能对我有用...........

答案 2 :(得分:0)

问题在于您的XIB文件。当finalLabel错误地连接或不再存在时,通常会发生此错误。请在Interface Builder一次检查您的连接。

答案 3 :(得分:0)

我也有这个错误。花了这么多时间后,我找到了解决方法。首先去控制台,看看错误在哪里(我的故事板和它的代码有关)我修复错误的方法是进入故事板。在iPhone屏幕下方,会有一个小黄色按钮。右键单击它,您将看到导致错误。如果有黄色错误标志,请删除(x)它。

如果这不能解决您的错误,请尝试创建新项目,然后将其空白文件替换为旧项目的旧文件。我在一开始就遇到了同样的错误,并且没有任何错误地运行这个程序。

其他人建议通过重新启动笔记本电脑并重新运行它,重置iOS模拟器或更改iOS调试器(但这不适用于最新的x代码,因为只有一个调试器)

希望这有帮助