将网址传递给Three20 TTURLMap

时间:2010-09-27 21:20:54

标签: url parameters map three20

我正在尝试将URL作为参数传递给TTURLMap,如下所示:

[map from@"tt://person/(initWithURL:)" toViewController: [PersonViewController class]];

然后我有一个TTStyledTableItemCell,其链接如下所示:

<a href="tt://person/http://persons.url.com/blah">Person name</a>

但是当我点击这些链接时,该链接不会调用initWithURL: PersonViewConroller类中的方法。我已经验证过了 通过传入一个简单的字符串正确连接。我相信这一点 因为解析器认为URL是其中的一部分,所以无法正常工作 TTURLMap网址映射。有没有办法逃脱这个人的饲料网址 (它是我需要用来提取信息的休息服务)?

提前多多感谢。

2 个答案:

答案 0 :(得分:5)

这是一个常见问题。我还没有找到一个优雅的解决方案;我能找到的最好的方法是在途中手动转义URL(例如通过Base64编码),然后在initWithURL:函数内手动取消它。 (实际上,为了清楚起见,你可能想要一个名为initWithBase64EncodedURL:的函数或类似的函数。)

答案 1 :(得分:1)

我认为TTURLMap绊倒的唯一字符是/字符,所以以下为我做了诀窍。只需在迈克建议进出init函数的方式中调用它们

+ (NSString *)encodeTtUrl:(NSString *)str {
    NSMutableString *temp = [NSMutableString stringWithString:str];
    [temp replaceOccurrencesOfString:@"/" withString:@"__" options:NSLiteralSearch range:NSMakeRange(0, [temp length])];
    return [NSString stringWithString:temp];
}

+ (NSString *)decodeTtUrl:(NSString *)str {
    NSMutableString *temp = [NSMutableString stringWithString:str];
    [temp replaceOccurrencesOfString:@"__" withString:@"/" options:NSLiteralSearch range:NSMakeRange(0, [temp length])];
    return [NSString stringWithString:temp];
}