2009-03-02 7 views
0

Je veux envoyer une chaîne d'une classe à l'autre:Comment transférer des valeurs entre classes sur iPhone?

1) Dans Class1, j'ajouter une propriété pour contenir la chaîne:

@property (nonatomic, retain) NSString *str;

2) et une méthode pour renvoyer une chaîne :


-(NSString *)sendBackStr:(NSString *)strURL 
{ 
    NSString *str = [[NSString alloc] stringWithString:strURL]; 
    return str; 
} 

3) Dans class2, j'ajouter une propriété pour contenir la chaîne reçue:

@property (nonatomic, retain) NSString *returnStr;

4) et le code suivant:

Class1 *c1 = [[Class1 alloc] init]; 
returnStr = [c1 sendBackStr:@"URL"];

Mais le programme arrête à returnStr = [c1 sendBackStr: @ "URL"]; Des idées sur ce qui ne va pas? StringWithString: est un message qui doit être envoyé à la classe NSString, pas une instance de votre classe (renvoyée via alloc).

Répondre

1

stringWithString est une méthode de classe retourner une chaîne autoreleased. Vous devriez l'appeler comme ceci:

myProperty = [NSString stringWithString:strURL]; 

Ici, je suppose que votre propriété fait une copie, pour augmenter le nombre sur la retenir chaîne autoreleased qui est retournée par la méthode stringWithString. (Les objets renvoyés à partir d'appels d'appel ont un nombre de retenue de 1 et ne sont pas auto-libérés.) Il est plus courant de donner à la propriété de copie plutôt que celle de conserver - vous voulez simplement votre propre copie d'une chaîne. chaîne appartenant à quelqu'un d'autre. Ce que je ne comprends pas non plus, c'est pourquoi vous avez écrit le code comme ceci, à moins que ce ne soit juste un exemple. En classe 2, tout ce que vous avez à faire est d'écrire

returnStr = [NSString stringWithString:@"URL"]; 
+0

Merci pour votre réponse. Et oui, c'est juste un test simple que j'écris pour transférer de la valeur. –

1

Le code correct doit être:

-(NSString *)sendBackStr:(NSString *)strURL 
{ 
    return [NSString stringWithString:strURL]; 
} 

Vous pouvez vous familarize plus sur les idiomes autour de l'allocation, la conservation et autoreleasing de pointeurs. Si vous voulez alloc cette chaîne pour une raison quelconque et retour du sendBackStr: message, alors vous voudrez probablement ce code:

-(NSString *)sendBackStr:(NSString *)strURL 
{ 
    return [[[NSString alloc] initWithString:strURL] autorelease]; 
} 
+0

L'alloc ne retourne pas une instance de "votre classe" - c'est [NSString alloc]. Mais stringWithString est une méthode de classe. –

Questions connexes