はい、これを行う方法があります。 URLのターゲットクラスは、例えば、ProfileController
は、このようにURLを登録している場合:あなたが見ることができるように
[map from:@"myapp://profile?originalURL=(initWithOriginalURL:)"
toViewController:[ProfileController class]];
、originalURL
という名前のクエリパラメータの値は、Aの最初の引数として渡されます関数initWithOriginalURL:
と呼ばれます。だから、ProfilerController
で、その関数を宣言:
- (id)initWithOriginalURL:(NSString*)originalURL {
// Initialize your controller. For example, you might do this:
if (self = [self initWithNibName:nil bundle:nil]) {
self.variableHeightRows = YES;
self.dataSource =
[TTListDataSource dataSourceWithObjects:
[TTTableLongTextItem itemWithText:[NSString stringWithFormat:@"Original URL is %@", originalURL]],
nil];
}
return self;
}
だから、あなたが開くことができるURLはmyapp://profile?originalURL=URL_GOES_HERE
ようになります。インターネット上のURLと同様に、すべてのクエリパラメータをURLエンコードすることが重要です。だからここに上記ProfileControllerを開くコードの例です。この場合は
// any URL goes here -- this is the query parameter we are going to
// pass as the "originalURL=..." parameter.
NSString* url = @"http://www.google.com/search?hl=en&q=stack+overflow";
// URL-encode it: turn most non-alphanumerics into %XX
NSString * encodedURL = (NSString *)CFURLCreateStringByAddingPercentEscapes(
NULL,
(CFStringRef)url,
NULL,
(CFStringRef)@"!*'\"();:@&=+$,/?%#[] ",
kCFStringEncodingUTF8);
// Open the URL
TTOpenURL([NSString stringWithFormat:@"myapp://profile?originalURL=%@", encodedURL]);
、encodedURL
はなってしまうでしょう。
myapp://profile?originalURL=http%3A%2F%2Fwww.google.com%2Fsearch%3Fhl%3Den%26q%3Dstack%2Boverflow
このソリューションでは、パラメータとして渡された元のURLと新しいURLを使用しています。元のURLを使用してそのパラメータにアクセスする方法を探していました。 –