2010-05-04 4 views
1

Je n'arrive pas à enregistrer des données dans un objet d'instance personnalisé dans mon AppDelegate. Ma classe personnalisée est très simple et est la suivante:Enregistrement de données dans une classe personnalisée via AppDelegate

Person.h

... 
@interface Person : NSObject { 
    int _age; 
} 

- (void) setAge: (int) age; 
- (int) age; 
@end 

Person.m

#import "Person.h" 

@implementation Person 

- (void) setAge:(int) age { 
    _age = age; 
} 
- (int) age { 
    return _age; 
} 
@end 

je puis créer une instance de la personne dans la classe AppDelegate :

AppDelegate.h

@class Person; 

@interface AccuTaxAppDelegate : NSObject <UIApplicationDelegate> { 
    ... 
Person *person; 
} 
... 
@property (nonatomic, retain) Person *person; 
@end 

AppDelegate.m

... 
#import "Person.h" 

@implementation AccuTaxAppDelegate 

... 
@synthesize person; 

- (void)applicationDidFinishLaunching:(UIApplication *)application { 

    // Override point for customization after app launch  
    [window addSubview:[navigationController view]]; 
    [window makeKeyAndVisible]; 
} 

- (void)applicationWillTerminate:(UIApplication *)application { 
// Save data if appropriate 
} 

#pragma mark - 
#pragma mark Memory management 

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

Enfin, dans mon code ViewController Je prends une poignée sur AppDelegate puis saisir l'instance de personne, mais lorsque je tente de sauver l'âge, il ne semblent fonctionner:

MyViewController

... 
- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    NSString *textAge = [textField text]; 
    int age = [textAge intValue]; 
    NSLog(@"Age from text field::%i", age); 

    AppDelegate *appDelegate = 
     (AppDelegate *)[UIApplication sharedApplication].delegate; 

    Person *myPerson = (Person *)[appDelegate person]; 
    NSLog(@"Age before setting: %i", [myPerson age]); 
    [myPerson setAge:age]; 
    NSLog(@"Age after setting: %i", [myPerson age]); 

    [textAge release]; 
} 
... 

La sortie des NSLogs ci-dessus sont:

[Session started at 2010-05-04 18:29:22 +0100.] 
2010-05-04 18:29:28.260 AccuTax[16235:207] Age in text field:25 
2010-05-04 18:29:28.262 AccuTax[16235:207] Age before setting: 0 
2010-05-04 18:29:28.263 AccuTax[16235:207] Age after setting: 0 

Toutes les idées pourquoi « l'âge » n'est pas stocké? Je suis relativement nouveau à Obj-C alors s'il vous plaît pardonnez-moi s'il me manque quelque chose de très simple!

Répondre

3

On dirait que vous ne avez jamais créé une instance de la personne - dans AccuTaxAppDelegate ajouter une méthode d'initialisation qui contient la ligne

personne = [[personne alloc] init];

sinon la personne est nulle;

+0

À noter qu'en Objective-C, il est tout à fait correct d'appeler des fonctions membres sur une instance nulle. Eh bien, en fait, ce n'est pas bien, mais ça ne va pas tomber en panne ou quoi que ce soit. – zpasternack

+0

Oh, non, je n'essayais pas d'insinuer que ça tomberait en panne, mais si vous voulez entrer dans les détails, le Runtime ObjC retourne juste 0/0.0/NULL/nil pour les appels à zéro, ce qui, par ailleurs, est exactement ce qui est passe ici –

+0

Ajout d'une méthode init a travaillé un charme. Je vous remercie. – ryan

Questions connexes