2010-09-27 37 views
1

我想在URL中作为参数传递给这样的TTURLMap:传递网址Three20 TTURLMap

[map [email protected]"tt://person/(initWithURL:)" toViewController: [PersonViewController class]];

然后我有一个TTStyledTableItemCell与链接,使这样的:

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

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

非常感谢提前。

回答

1

我认为TTURLMap旅行的唯一字符是/字符, 。只要将这些称为迈克建议在进出你的初始化函数的方式

+ (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]; 
} 
+0

是啊,这是我最终做的,不漂亮,但它的工作... – Ben 2011-03-11 22:37:42

5

这是一个常见问题。我还没有找到一个优雅的解决方案;我已经能够找到的最好的方法是在途中手动转义URL(例如通过Base64编码),然后在您的initWithURL:函数中手动使用它。 (其实,为了清晰起见,你可能想要一个叫initWithBase64EncodedURL:或者类似的东西)