web-dev-qa-db-fra.com

SIGABRT du signal reçu du programme Objectif 1, fil 1

J'essaie de compiler et d'exécuter un didacticiel simple pour une application Objective C à l'aide d'Interface Builder. J'utilise Xcode 4.0.2 et simule sur iOS (iPhone) 4.3

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

Lorsque je construis le projet, il se construit bien, mais une fois que l'application essaie de l'exécuter, celle-ci plante:

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

J'obtiens l'erreur sur la ligne 4: int retVal = UI ... Thread 1: Signal reçu du programme "SIGABRT".

Si les autres fichiers de ce projet doivent être publiés pour plus de clarté, je peux le faire.

Merci!

Modifier:

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

Message d'erreur:

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) 

Je suis nouveau sur obj-c et je n'ai absolument aucune idée de ce que je regarde en ce qui concerne ce message d'erreur. De l'aide?

16
eric.mitchell

Vous avez une erreur dans votre fichier NIB/XIB.

Il semble que vous ayez précédemment attaché un IBOutlet (textInput) et que la connexion est maintenant interrompue. Vous devez vérifier toutes les connexions dans Interface Builder.

21
jv42

Il est probable que vous ayez défini le type de "Propriétaire du fichier" de manière incorrecte sur UIViewController dans votre xib SimpleUIViewController. Définissez-le sur SimpleUIViewController dans le volet Inspecteur d'identité.

3
ZhangChn

Maintenant je le vois! Votre rapport d'accident dit:

Unknown class InterfaceBuilderAppDelegate_iPhone

Il semble donc que vous ayez défini votre délégué d'application dans IB pour cette classe, mais cette classe n'est pas disponible dans votre projet. Vérifie ça. Soit vous avez mal orthographié le nom de la classe, soit vous devez ajouter la classe appropriée à votre projet.

Très probablement, votre champ de texte est connecté à ce délégué de l'application.

Avez-vous connecté votre champ de texte dans Interface Builder à la sortie SimpleUIViewController?

Comme il ressort du didacticiel que vous n'utilisez pas MainWindow.xib, je dirais qu'il manque à votre projet l'exécution du délégué approprié. Essayez de faire ce changement dans votre main:

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

Si mon hypothèse est correcte, cela devrait vous faire avancer.

2
sergio

Pour résoudre ce problème, chargez le fichier XIB dans Interface Builder, sélectionnez l'onglet Inspecteur de fichier, puis décochez la case Utiliser autolayout. Vous pouvez également cibler les appareils iOS 6.0 + et modifier la cible minimale, si vous devez absolument disposer de l'autolayout.

NSLayoutConstraint SIGABRT sur iPad

2
HenriqueAdriano

programme 1 du thread a reçu le signal 

parfois, la valeur de NSString est nulle!

cela peut provoquer cela lors de l'initialisation de votre application!

0
kiran