2010-11-01 7 views
1

J'apprends juste l'Objective-C et j'ai une question assez fondamentale ici. Il s'agit d'une fonction que j'ai créée qui retiendra simplement les variables de certaines entrées de l'utilisateur.Transmettre les variables de la fonction à la fonction

- (void)standardDatabaseWithName:(NSString*)name 
          host:(NSString*)host 
         username:(NSString*)username 
         password:(NSString*)password 
         database:(NSString*)database 
          port:(NSInteger*)port { 

    NSString *myName = name; 
    NSString *myHost = host; 
    NSString *myUsername = username; 
    NSString *myPassword = password; 
    NSString *myDatabase = database; 
    NSInteger *myPort = port; 
} 

Voici une fonction séparée où je veux créer un nouveau var avec cette information et l'utiliser de là, il était ce que je dois.

- (void)insertStandardConnection { 
    NSString name = [NewDbModalView standardDatabaseWithName:myName]; 
    NSString host = [NewDbModalView standardDatabaseWithName:myHost]; 
} 

Cette tentative n'a donc pas fonctionné pour moi. Des conseils ici les gars? À ce stade, j'ai été laissé me gratter la tête.

Répondre

2

Je suggère de créer un objet de tenir toutes ces informations et juste passer l'objet autour

0

Chaque fois que vous appelez la méthode, vous devez fournir toutes les variables:

[NewDbModalView standardDatabaseWithName:myName host:myHost username:aUsername password:aPassword database:aDatabase port:aPort]; 

Alors , lorsque vous appelez [NewDbModalView standardDatabaseWithName:myName], cette méthode n'existe pas.

+0

Hey, merci ça a du sens. Donc la raison pour laquelle j'espérais que ma méthode fonctionnerait est parce que je dois, à un certain point, cibler seulement l'un de ces var. Donc dis que j'ai fait ce que tu as suggéré et que tu dois seulement travailler avec le nom d'utilisateur par exemple. Comment puis-je cibler cela? –

+0

Vous pouvez créer des méthodes pour effectuer chacune d'elles. Donc, si vous avez seulement besoin de changer le mot de passe, faites une méthode '-setPassword:'. –

0

Les variables que vous déclarez dans standardDatabaseWithName:... sont locales à cette méthode. Vous devez stocker (copies de) ces données dans l'objet. Bien que, en regardant votre code, je me demande si vous essayez de définir des valeurs par défaut? Dans ce cas, vous souhaiterez peut-être que les variables globales statiques prennent les valeurs, puis vous aurez besoin de -(void)standardDatabaseWithName:... pour devenir +(void)setStandardDatabaseName:(NSString *)name ....

0

Dans votre fichier .h vous devez déclarer des propriétés

@interface standardDatabaseWithNameObject : NSObject{ 
    NSString *myName; 
    NSString *myHost; 
    NSString *myUsername ; 
    NSString *myPassword; 
    NSString *myDatabase; 
    NSInteger *myPort; 
    } 

    @property (nonatomic, retain) NSString *myName; 
    @property (nonatomic, retain) NSString *myHost; 
    @property (nonatomic, retain) NSString *myUsername ; 
    @property (nonatomic, retain) NSString *myPassword; 
    @property (nonatomic, retain) NSString *myDatabase; 
    @property (nonatomic, retain) NSInteger *myPort; 
etc... 

Ensuite, dans votre implémentation, vous devez synthétiser les propriétés et ils seront disponibles pour:

@synthesize myName, myHost, myUsername, myPassword, myDatabase, myPort; 


- (void)standardDatabaseWithName:(NSString*)name 
          host:(NSString*)host 
         username:(NSString*)username 
         password:(NSString*)password 
         database:(NSString*)database 
          port:(NSInteger*)port { 

    myName = name; 
    myHost = host; 
    myUsername = username; 
    myPassword = password; 
    myDatabase = database; 
    myPort = port; 
} 

- (void)insertStandardConnection { 
    NSString name = myName; 
    NSString host = myHost; 
} 

- (void) dealloc 
{ 
[myName release]; 
[myHost release]; 
[myUsername release]; 
[myPassword release]; 
[myDatabase release]; 
[myPort release]; 

} 

Bonne chance

+0

Salut, merci beaucoup. Vous avez rendu ce joli cristal clair. Donc, en passant ce montant ou info autour. Il est probablement toujours plus propre de créer un objet séparé, correct? –

+2

Tous ces éléments doivent être self.myName, etc, ou le code ci-dessus ne suivra pas les règles de conservation/libération ... – bbum

+1

Shane, selon l'endroit où vous avez besoin des données, vous devriez les stocker à ce niveau particulier. Si vous en avez seulement besoin dans une fonction, déclarez-le dans la fonction. Si vous en avez besoin dans l'objet, déclarez-le comme une propriété. Si vous avez besoin de globalement, déclarez-le globalement. - Aussi bbum a raison, vous voulez libérer vos variables à un moment donné pour ne pas créer une fuite de mémoire. –

Questions connexes