2011-06-09 76 views
16

我正在尝试使用Interface Builder编译和运行Objective C应用程序的简单教程。我使用的Xcode 4.0.2和iOS模拟(iPhone)4.3Objective C,线程1程序接收信号SIGABRT

http://www.switchonthecode.com/tutorials/creating-your-first-iphone-application-with-interface-builder

当我生成项目,它建立正常的,但一旦应用程序试图运行它与崩溃:

int main(int argc, char *argv[]) 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = UIApplicationMain(argc, argv, nil, @"SimpleUIAppDelegate"); 
    [pool release]; 
    return retVal; 
} 

我得到第4行的错误:int retVal = UI ...线程1:编程接收信号“SIGABRT”。

如果这个项目的其他文件需要发布清楚,我可以做到这一点。

谢谢!

编辑:

SimpleUIViewController.h:

#import <UIKit/UIKit.h> 

@interface SimpleUIViewController : UIViewController <UITextFieldDelegate> { 
    UITextField *textInput; 
    UILabel *label; 
    NSString *name; 
} 

@property (nonatomic, retain) IBOutlet UITextField *textInput; 
@property (nonatomic, retain) IBOutlet UILabel *label; 
@property (nonatomic, copy) NSString *name; 

- (IBAction)changeGreeting:(id)sender; 

@end 

SimpleUIViewController.m:

#import "SimpleUIViewController.h" 

@implementation SimpleUIViewController 

@synthesize textInput; 
@synthesize label; 
@synthesize name; 

- (IBAction)changeGreeting:(id)sender { 
    self.name = textInput.text; 

    NSString *nameString = name; 
    if([nameString length] == 0) { 
     nameString = @"Inigo Montoya"; 
    } 
    NSString *greeting = [[NSString alloc] 
          initWithFormat:@"Hello, my name is %@!", nameString]; 
    label.text = greeting; 
    [greeting release]; 
} 

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 
    if(theTextField == textInput) { 
     [textInput resignFirstResponder]; 
    } 
    return YES; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Release anything that's not essential, such as cached data 
} 

- (void)dealloc { 
    [textInput release]; 
    [label release]; 
    [name release]; 
    [super dealloc]; 
} 

@end 

错误消息:

This GDB was configured as "x86_64-apple-darwin".Attaching to process 2668. 
2011-06-09 11:20:21.662 InterfaceBuilder[2668:207] Unknown class InterfaceBuilderAppDelegate_iPhone in Interface Builder file. 
2011-06-09 11:20:21.666 InterfaceBuilder[2668:207] *** Terminating app due to uncaught  exception 'NSUnknownKeyException', reason: '[<UIApplication 0x4b1a900>  setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key textInput.' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x00dc25a9 __exceptionPreprocess + 185 
    1 libobjc.A.dylib      0x00f16313 objc_exception_throw + 44 
    2 CoreFoundation      0x00dc24e1 -[NSException raise] + 17 
    3 Foundation       0x00794677 _NSSetUsingKeyValueSetter + 135 
    4 Foundation       0x007945e5 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 285 
    5 UIKit        0x0021030c -[UIRuntimeOutletConnection connect] + 112 
    6 CoreFoundation      0x00d388cf -[NSArray makeObjectsPerformSelector:] + 239 
    7 UIKit        0x0020ed23 -[UINib instantiateWithOwner:options:] + 1041 
    8 UIKit        0x00210ab7 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168 
    9 UIKit        0x0001617a -[UIApplication _loadMainNibFile] + 172 
    10 UIKit        0x00016cf4 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 291 
    11 UIKit        0x00021617 -[UIApplication handleEvent:withNewEvent:] + 1533 
    12 UIKit        0x00019abf -[UIApplication sendEvent:] + 71 
    13 UIKit        0x0001ef2e _UIApplicationHandleEvent + 7576 
    14 GraphicsServices     0x00ffb992 PurpleEventCallback + 1550 
    15 CoreFoundation      0x00da3944 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52 
    16 CoreFoundation      0x00d03cf7 __CFRunLoopDoSource1 + 215 
    17 CoreFoundation      0x00d00f83 __CFRunLoopRun + 979 
    18 CoreFoundation      0x00d00840 CFRunLoopRunSpecific + 208 
    19 CoreFoundation      0x00d00761 CFRunLoopRunInMode + 97 
    20 UIKit        0x000167d2 -[UIApplication _run] + 623 
    21 UIKit        0x00022c93 UIApplicationMain + 1160 
    22 InterfaceBuilder     0x000027ff main + 127 
    23 InterfaceBuilder     0x00002775 start + 53 
    24 ???         0x00000001 0x0 + 1 
) 
terminate called after throwing an instance of 'NSException' 
sharedlibrary apply-load-rules all 
Current language: auto; currently objective-c 
(gdb) 

进出口新的OBJ-c和具有绝对性根本不知道我在看那个错误信息。任何帮助?

+1

是啊,我想你将不得不提供更多的代码和更多的碰撞信息...你有什么别的比SIGABRT,像一个例外,调用堆栈,等等? – jv42 2011-06-09 14:19:11

+0

这够了吗?这几乎是一切。 – 2011-06-09 15:30:58

+0

是的!这应该足以给你一个答案,我现在正在解析它。 – jv42 2011-06-09 15:45:09

回答

21

您的NIB/XIB文件中有错误。

它看起来像你以前连接了一个IBOutlet(textInput),现在连接已断开。您应该再次检查Interface Builder中的所有连接。

2

现在我明白了!您的崩溃报告说:

Unknown class InterfaceBuilderAppDelegate_iPhone 

所以,似乎你设置应用程序委托在IB这一类,但这个类是不具备的项目。检查这个。要么拼错类名,要么将相关类添加到项目中。

极有可能,您的文本字段已连接到此应用程序委托。

您是否已将Interface Builder中的文本字段连接到SimpleUIViewController插座?

由于从教程中可以看出您没有使用MainWindow.xib,所以我会说您的项目缺少运行正确的代理。尝试在你的主要进行此更改:

int retVal = UIApplicationMain(argc,argv,nil,@“SimpleUIAppDelegate”);

如果我的假设是正确的,那就应该推动你的前进。

+0

那没有做到。我仍然在相同的地方得到相同的错误信息。但是,究竟做了什么? – 2011-06-09 15:27:10

+0

而我正在使用MainWindow.xib – 2011-06-09 15:27:57

+0

请参阅我的编辑,请... – sergio 2011-06-09 15:35:54

3

这很可能是您的'File's Owner'错误地设置到您的SimpleUIViewController的xib中的UIViewController。请在身份检查器窗格中将其设置为SimpleUIViewController。

0

线程1个程序recived葛SIGABRT

有时NSString的值去nill!

它可能会导致此应用程序的初始化!

2

要解决该问题,请在Interface Builder中加载XIB,选择文件检查器选项卡,然后取消选中使用自动布局。或者,如果您绝对必须具有自动布局功能,则可以仅限iOS 6.0 +设备并更改最低目标。

NSLayoutConstraint SIGABRT on iPad

相关问题