2010-11-03 26 views
0

Je voudrais créer une méthode qui retourne plusieurs NSString. Je pense à ce genre de méthode, mais je ne trouve pas dans le style objc plutôt C style programmeur - il utilise des pointeurs vers (NSString *), donc (NSString **):Renvoyer plusieurs NSString

- (LONG) readOwnerInformationToNationalNumber:(NSString**) nationalNumber 
            toName:(NSString**) name 
           toFirstName:(NSString**) firstName 
          toNationality:(NSString**) nationality 
          toPlaceOfBirth:(NSString**) placeOfBirth 
          toDateOfBirth:(NSString**) dateOfBirth 
           toGender:(NSString**) gender 
         toStreetAndNumber:(NSString**) streetAndNumber 
            toZip:(NSString**) zip 
          toMunicipality:(NSString**) municipality 
          toChipNumber:(NSString**) chipNumber 
        toCardValidityDateBegin:(NSString**) cardValidityDateBegin 
        toCardValidityDateEnd:(NSString**) cardValidityDateEnd 
       toCardDeliveryMunicipality:(NSString**) cardDeliveryMunicipality 

Dans la méthode corps, je retourne cordes comme ceci:

*nationalNumber = [NSString stringWithString:@"11223344"]; 

en fait, il est la première fois que je suis retourné plusieurs NSString et toujours revenir mon NSString comme paramètre de retour.

Est-ce une façon laide, pas robuste ou faisable?

Cordialement, d'Apple 92

Répondre

4

Ce que vous faites est certainement possible, mais je ne le trouve pas très élégant. Les informations que vous devez retourner semblent appartenir ensemble, alors pourquoi ne créez-vous pas une classe personnalisée qui inclut tous ces champs et demandez à votre méthode de renvoyer une instance de cette classe?

+0

Je viens de l'essayer et ça marche. Votre idée de créer une nouvelle classe permettrait en effet de rassembler les champs mais je devrais encore passer un pointeur vers cette classe (parce que je veux garder le code de retour LONG C-Style). Ce serait dans le style - (LONG) readOwnerInformationToDataRecipient: (Destinataire **) theRecipient – user255607

+0

Ou simplement utiliser NSDictionary pour les deux sortie de la méthode. Tout cela est juste une valeur-clé. –

+0

@ user255607: Pourquoi voulez-vous/devez-vous retourner un 'long'? – mipadi

1

Probablement la « voie cacao » serait de retourner un NSDictionary si vous ne voulez pas une classe personnalisée:

- (NSDictionary*) readOwnerInformationToNationalNumber 
{ 
    // do stuff 

    NSDictionary* returnedDictionary 
     = dictionaryWithObjectsAndKeys: 
       nationalNumber,   @"nationalNumber", 
       name,      @"name", 
       // etc ... 
       cardDeliveryMunicipality, @"cardDeliveryMunicipality", 
       nil]; 

    return returnedDictionary; 
} 

Il est utilisé dans Coca dans plusieurs endroits par exemple NSURL -resourceValuesForKeys:error