0

我正在尝试通过 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: 方法被调用,但它从不显示在屏幕上。我是否错过了让控制器获取参数并显示自身的步骤?

谢谢。

4

2 回答 2

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;
}

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

于 2010-12-08T09:59:19.443 回答
0

这工作正常:

NSString *strTTURL = [NSString stringWithFormat:@"tt://PhotoDetail/%@",photoID];
TTURLAction *urlAction=[[[TTURLAction alloc] initWithURLPath:strTTURL] autorelease];
urlAction.animated=YES;
[[TTNavigator navigator]openURLAction:urlAction];
于 2011-11-28T13:40:45.960 回答