2010-12-03 31 views
0

Je suis en train de passer des paramètres via Three20 pour iOS d'une manière similaire à cette question: Multi-parameter mapping with Three20 and TTURLMapTTNavigator ne pas ouvrir correctement TTURLMap lors du passage des paramètres

Cependant, je suis en cours d'exécution dans une question qui ne traite pas la question . Ma cartographie est actuellement mis en place comme

[map from:@"sb://launcher/(initWithAccount:)" toModalViewController:[AccountOverviewViewController class] transition:0]; 

Pour y arriver, je vous appelle:

NSString *URL = [NSString stringWithFormat:@"sb://launcher/%@", [@"hey" stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]]; 
[[TTNavigator navigator] openURLAction:[[TTURLAction actionWithURLPath:URL] applyAnimated:YES]]; 

Puis, en AccountOverviewViewController, je

- (void)initWithAccount:(NSString *)name { 
NSLog(name); 

}

faire bien sûr que je reçois la bonne valeur (ce que je suis) car Console.app sort "hey". Tout cela fonctionne bien, sauf pour une chose, AccountOverviewViewController ne s'affiche jamais! La méthode initWithAccount: est appelée, mais elle ne s'affiche jamais à l'écran. Ai-je manqué une étape ici pour que le contrôleur obtienne le paramètre ET se montre?

Merci.

Répondre

0

La méthode initWithAccount:(NSString*)name est incorrecte. Il devrait lire - (id)initWithAccount:(NSString*)name et il devrait retourner le soi. TTNavigator utilise cette valeur de retour (c'est un descendant de UIViewController) et le pousse vers le contrôleur de navigation. Comme vous ne retournez rien, c'est de la pure chance, que l'application ne plante pas, mais ne montre rien.

Le modèle à utiliser pour toute méthode qui commence par init Cocoa Touch est:

- (id) initWithSomething:(id)something { 
    if (self = [<designated initializer>]) { 
     //Do something here. 
    } 
    return self; 
} 

La première ligne dépend de quelle classe vous le sous-classement de. Vous devez toujours appeler l'initialiseur désigné. Donc, étant donné que vous sous-classez UIViewController ou TTViewController, ce serait [self initWithNibName:nil bundle:nil].

0

Cela fonctionne très bien:

NSString *strTTURL = [NSString stringWithFormat:@"tt://PhotoDetail/%@",photoID]; 
TTURLAction *urlAction=[[[TTURLAction alloc] initWithURLPath:strTTURL] autorelease]; 
urlAction.animated=YES; 
[[TTNavigator navigator]openURLAction:urlAction];