13

次のURLをで開こうとしていますUIWebViewが、次のように変更してもロードに失敗します。

 http://www.google.com

正常に動作します。

ロードしたいURLは次のとおりです。

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@%@%@%@",@"http://m.forrent.com/search.php?address=",[[bookListing objectForKey:@"Data"] objectForKey:@"zip"],@"&beds=&baths=&price_to=0#{\"lat\":\"0\",\"lon\":\"0\",\"distance\":\"25\",\"seed\":\"1622727896\",\"is_sort_default\":\"1\",\"sort_by\":\"\",\"page\":\"1\",\"startIndex\":\"0\",\"address\":\"",[[bookListing objectForKey:@"Data"] objectForKey:@"zip"],@"\",\"beds\":\"\",\"baths\":\"\",\"price_to\":\"0\"}"]]]];

アップデート:

意図的に二重引用符をエスケープしました。そうしないと、エラーが発生します。ブラウザ(ラップトップ)で開いてURLを確認しましたが、完全に正常に機能します。

ブラウザのURL:

http://m.forrent.com/search.php?address=92115&beds=&baths=&price_to=0#{%22lat%22:%220%22,%22lon%22:%220%22,%22distance%22:%2225%22,%22seed%22:%221622727896%22,%22is_sort_default%22:%221%22,%22sort_by%22:%22%22,%22page%22:%221%22,%22startIndex%22:%220%22,%22address%22:%2292115%22,%22beds%22:%22%22,%22baths%22:%22%22,%22price_to%22:%220%22}
4

2 に答える 2

21

コードの行は複雑に見えますが、基本的には非常に単純なものです。

このコードを1つのライナーからより読みやすい複数の行に分割する必要があります。これにより、次のように、実際に作成したURLをログに記録して確認することもできます。

NSLog(@"My url: %@", urlString);

更新:完全なURLを追加したようです。Webviewは実際にそのURLのロードに失敗します(UIWebkitエラー101)。

問題の原因となるURLの部分は、パラメータの後に続く「#」文字と辞書です。URLのその部分をURLエンコードする必要があります。

これを試して:

NSString *address = @"http://m.forrent.com/search.php?";
NSString *params1 = @"address=92115&beds=&baths=&price_to=0";

// URL encode the problematic part of the url.
NSString *params2 = @"#{%22lat%22:%220%22,%22lon%22:%220%22,%22distance%22:%2225%22,%22seed%22:%221622727896%22,%22is_sort_default%22:%221%22,%22sort_by%22:%22%22,%22page%22:%221%22,%22startIndex%22:%220%22,%22address%22:%2292115%22,%22beds%22:%22%22,%22baths%22:%22%22,%22price_to%22:%220%22}";
params2 = [self escape:params2];

// Build the url and loadRequest
NSString *urlString = [NSString stringWithFormat:@"%@%@%@",address,params1,params2];
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]]];

私が使用したエスケープ方法:

- (NSString *)escape:(NSString *)text
{
    return (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
                                                                        (__bridge CFStringRef)text, NULL,
                                                                        (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                                                        kCFStringEncodingUTF8);
}
于 2012-10-08T19:53:57.237 に答える
1

URL内のすべてのKey/Valueアイテムをエンコードしてみます。具体的には、中括弧({})とハッシュ(#)記号が問題を引き起こしている可能性があります。

于 2012-10-08T19:37:47.443 に答える