見つけた関連するすべての質問 (検索: "NSURLErrorDomain -1000") を調べましたが、解決策が見つかりませんでした。眼の鋭い人が助けてくれるかもしれません。
私は iOS 6 から Instagram API への呼び出しを行っています (ただし、動作する部分は iOS 5.1 で既に動作しています)。私は Koolistov のNSURL+PathParameters.hをヘルパーとして使用していますが、URL に必要なすべてのものを実際にエスケープしていると理解しています。
いくつかの予備:
NSDictionary *parameters = nil;
NSURL *URL = [NSURL URLWithString:@"https://api.instagram.com/"];
parameters = [NSDictionary dictionaryWithObjectsAndKeys:
INSTAGRAM_CLIENT_ID, @"client_id", nil];
URL = [URL URLByReplacingPathWithPath:@"/v1/tags/awesome/media/recent"];
URL = [URL URLByAppendingParameters:parameters];
(INSTAGRAM_CLIENT_ID
アプリのクライアント ID を含むマクロです。)
この URL は期待どおりに機能します。
ただし、次のように構成された URL では、NSURLErrorDomain
一貫して code = -1000 が得られます (デバイス上および iPhone 5.1 と 6.0 シミュレーターの両方で)。
double latitude = 48.858844;
double longitude = 2.294351;
parameters = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithDouble:latitude], @"lat",
[NSNumber numberWithDouble:longitude], @"lng",
[NSNumber numberWithInt:2000], @"distance",
INSTAGRAM_CLIENT_ID, @"client_id",
nil];
URL = [URL URLByReplacingPathWithPath:@"/v1/media/search"];
URL = [URL URLByAppendingParameters:parameters];
次に、次を作成しますNSURLRequest
。
NSURLRequest *req = [NSURLRequest requestWithURL:URL];
から URL を出力するNSURLRequest
と、まったく問題ないように見えます。
https://api.instagram.com/v1/media/search?client_id=REDACTED&distance=2000&lat=48.858844&lng=2.294351
MyDownloader
Matt Neuburg のProgramming iOS 5の Chapter 37 から使用していMyDownloader
ますNSURLRequest
。
MyDownloader *downloader = [[MyDownloader alloc] initWithRequest:req];
RFC 3986によると、アンダースコアまたはドットをエスケープする必要はありません。エスケープするものは他にありません。とにかく、NSURL+PathParameters.h でエスケープを処理する必要があります。それで、ここで何が起こっているのですか?私は何が欠けていますか?
さらに奇妙なことに、URL を構成するこのさらに単純な方法でも同じエラーが発生します。
parameters = [NSDictionary dictionaryWithObjectsAndKeys:
INSTAGRAM_CLIENT_ID, @"client_id", nil];
URL = [URL URLByReplacingPathWithPath:@"/v1/media/popular"];
それもOKに見えます:
https://api.instagram.com/v1/media/popular?client_id=REDACTED
これらの URL はすべて、Instagram API コンソールと直接 Safari で機能します。これらの API 呼び出しには OAuth 認証は必要なく、クライアント ID のみが必要です。
誰かが問題が何であるかを指摘できれば、私は素晴らしいと思います。
EDITlat
:とのlng
値を次のようにエンコード:
[[[NSNumber numberWithDouble:latitude] stringValue]
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]
URL や動作に変更はありません。しかし、ドットをリテラル%2E
の 's に置き換えると、パス ヘルパーはパーセント記号をエンコードし、結果は%252E
...