2013-04-18 3 views
0

Je comprends que je ne peux pas passer de variables d'instance dans les méthodes Class, donc je ne suis plus confus de la différence entre les deux.Correspondance de 2 valeurs NSString entre les méthodes de classe

D'où je suis un peu coincé.

J'ai 2 méthodes de classe et ils peuvent tous deux prendre un NSString comme argument.

Y at-il de toute façon une correspondance? Comme une méthode de classe a une chaîne qui sera une URL qui doit être ouvert dans Safari après un bouton est pressé et donc @selector(openBrowser:) a besoin de savoir ce que l'URL est de JWKObjectView01

S'il vous plaît me dire qu'il ya un moyen de fais ça ??

J'ai essayé de changer tout à des méthodes d'instance, mais les application se bloque lorsque j'appuie sur le bouton - donc je suis en train de travailler sur cette :-)

Merci à l'avance. PS Je sais que je commence par dire que je comprends que vous ne pouvez pas mélanger les 2 classes - autant que je sache, mais peut-être qu'il me manque quelque chose?

// code ajouté:

UIView classe .h

@interface JWKObjectView01 : UIView <UIWebViewDelegate> 
{ 
    NSString *string; 
    NSURL *url; 

    NSUserDefaults *defaults; 
} 

+ (JWKObjectView01 *)anyView:(UIView *)anyView 
         title:(NSString *)title 
         weburl:(NSString *)webstring; 

+ (void)openBrowser:(NSString *)urlString; 

fichier .m

+ (JWKObjectView01 *)anyView:(UIView *)anyView 
         title:(NSString *)title 
         weburl:(NSString *)webString 
{ 
    JWKObjectView01 *anotherView = [[JWKObjectView01 alloc] initWithFrame:CGRectMake(0,0,320,200)]; 
    anotherView.backgroundColor = [UIColor yellowColor]; 

    [anyView addSubview:anotherView]; 

    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    button.frame = CGRectMake(20, 20, 100, 100); 

    [button setTitle:title forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(openBrowser:) forControlEvents:UIControlEventTouchUpInside]; 

    [anotherView addSubview:button]; 

    return anotherView; 
} 

+ (void)openBrowser:(NSString *)urlString; 
{ 

    //This is where I am stuck and I need the variable - weburl:(NSString *)webString - 

    NSURL *url = [NSURL URLWithString:urlString]; 

    [[UIApplication sharedApplication] openURL:url]; 
} 

fichier .m View Controller

-(void)viewDidLoad 
    { 
    [JWKObjectView01 anyView:self.view title:@"OPEN" weburl:@"http://google.com"]; 
    } 
+0

Veuillez poster ce que vous avez essayé. –

+0

"une méthode Class a une chaîne qui sera une url qui doit être ouverte dans Safari après qu'un bouton est pressé" - cette partie est très difficile à comprendre sans un exemple de code: la discussion sur les variables de classe "ayant" des sons de chaînes suspecte, car la seule façon dont une méthode de classe peut conserver son état est à travers des variables statiques et des singletones dans d'autres classes. Je soupçonne que le problème est quelque part dans ce domaine; veuillez poster le code de la méthode de classe 'A'. – dasblinkenlight

+0

Très bien - J'ai ajouté le code, j'espère que ça aide. –

Répondre

1

Utilisez un variabl statique e pour l'url. Initialisez-le dans la méthode initialize (ce n'est pas la méthode init). Vous pouvez bien sûr ajouter une méthode qui définit la valeur statique de varialbe.

Une variable statique, comme les variables de classe dans d'autres langues, n'existe qu'une seule fois au moment de l'exécution.

Mais ce ne sont pas des variables de classe. Vous pouvez obtenir des conflits de noms lorsque le nom est également utilisé pour d'autres variables statiques dans d'autres classes. Par conséquent, familiarisez-vous avec le modèle singleton et envisagez de l'utiliser lorsque vous avez besoin d'un varialbe statique.

Certaines personnes "abusent" de l'objet délégué de l'application en tant que conteneur pour les valeurs du caractère global. Cela peut ne pas être "hors du livre" mais fonctionne bien et est assez commun. Cependant, je crois que vous êtes bien mieux avec un singleton. Tout ceci suppose que l'URL associée portera la même valeur à la fois pour toutes les instances de JWKObjectView01.

+0

Fantastique - merci beaucoup :-) –

Questions connexes