我试图通过类似于这个问题的方式通过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显示自己吗?
感谢。
答案 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];