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
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?
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.
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é.
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.
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.
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!