传递参数时,TTNavigator无法正确打开TTURLMap

时间:2010-12-03 21:48:26

标签: ios4 three20 ttnavigator

我试图通过类似于这个问题的方式通过Three20 for iOS传递参数:Multi-parameter mapping with Three20 and TTURLMap

但是,我遇到了一个问题无法解决的问题。我的映射目前设置为

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

要到达那里,我打电话:

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

然后,在AccountOverviewViewController中,我有

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

}

确保我获得正确的值(我是),因为Console.app正在输出“嘿”。所有工作正常,除了一件事,AccountOverviewViewController永远不会出现!它内部的initWithAccount:方法被调用,但它从不在屏幕上显示。我在这里错过了一步让控制器获取参数AND显示自己吗?

感谢。

2 个答案:

答案 0 :(得分:0)

您的initWithAccount:(NSString*)name方法错误。它应该是- (id)initWithAccount:(NSString*)name,它应该返回自己。 TTNavigator使用此返回值(它是UIViewController后代)并将其推送到导航控制器。由于你没有返回任何东西,这是纯粹的运气,应用程序不会崩溃,但只是不显示任何内容。

用于Cocoa Touch中以init开头的任何方法的模式是:

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

第一行取决于您从哪个类继承。您总是希望调用指定的初始化程序。因此,如果您是[self initWithNibName:nil bundle:nil],则为子类化UIViewController或TTViewController。

答案 1 :(得分:0)

这很好用:

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