2012-03-01 5 views
0

実際のデータをロードせずにURLが存在するかどうかをテストしたいと思います。外部URLのファイルがダウンロードされずに存在するかどうかをテストするにはどうすればよいですか?

私はNSURLConnectionを開始することを考えて、その後、状態を確認するために、これらの2つのデリゲートメソッドを使用していました:

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
    // Connection failed ... presumably this is a server issue, and I don't know if the URL exists or not. 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    int status = [((NSHTTPURLResponse *)response) statusCode]; 
    [connection cancel]; 
    // Do something with the status 
} 

が、これは賢明な方法だろうか?私がテストしているファイルは非常に大きくなる可能性があるので、実際のファイルがダウンロードされていないことを確認したい。

おかげで、 ロン

P.S.私は、アップルがインターネットからダウンロードしたファイルのバックアップを止めるように強制したので、これを追加することを検討している。代わりに、バックアップされていない領域にファイルを格納し、バックアップしたデータベースにファイルの元の場所を記録します。ファイルはユーザーのライブラリの永続的な部分であることを意図しているため、ファイルにアクセスできない場合は定期的にテストして、バックアップされた領域に移動したいと考えています(たとえば、新しいデバイスへの復元時には存続します) 。私は、顧客が重要なデータを失うと想像することができるので、私にこの変更を強制するためにAppleに非常に腹を立てています。

p.p.s.いくつかの奇妙な理由により、これらの代理メソッドはNSURLConnectionDelegate Protocolのドキュメントには表示されなくなりました。私はドキュメントがちょうどうんざりしていると仮定しています。

+0

あなたの文について詳しく説明することができ、「Appleは、インターネットからダウンロードしたファイルのバックアップを停止するように私のアプリを強制的に。」私のアプリでは、サーバからダウンロードしたファイルをiCloudに保存するオプションが提供されます。アップルはこのオプションを手に入れないだろうか?彼らは何の理由で拒否したのですか? –

+0

私は正確な言葉遣いを忘れていますが、アップルはユーザが作成したファイルだけをバックアップできるという新しい制約を挙げています。再作成可能なファイルはバックアップすることができず、「バックアップ属性を持たない」ことが必要です。私の問題は、Web上のファイルが削除されず、自分のアプリケーションが制御できない場合に、自分のアプリケーションがダウンロードするファイルが再作成可能であることです。私はiCloudに送信されるファイルについてはわかりません...私のアプリケーションは、ライブラリ/キャッシュ以外の領域のサンドボックスにファイルを格納するだけでした。 – Ron

+0

私の最後のコメントから引き続き、私はこの拒絶に異議を唱え、Appleの開発部門から電話を受けました。彼らは私のファイルは再処理可能ではないが、彼らはまだ私のアプリケーションを拒否することを決めたと彼らは理解していると私に言った。彼らは、Dropboxのようなサードパーティ製のクラウドソリューションを使って、Appleが私にバックアップを許可しないような重要なファイルを保存することを提案した。私は自分のアプリケーションのユーザーにこれをどのように言いたいか考えようとしています。「Appleは、このアプリケーションが重要なファイルの一部をバックアップすることを許可するだけです。すべてをバックアップする場合は、このリンクをクリックしてくださいDropboxアカウントを作成してください。 – Ron

答えて

3

個人的には、生のリクエストを送信するか、標準のHTTPヘッダーであるHEADを使用するようにヘッドを変更します。

これはGETと同じ結果型です。結果のヘッダーを確認できる場合は、その403,404または201が正しいかどうかを確認してください。

http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

+1

iOSでこれを行う方法は、NSMutableURLRequestを使用してsetHTTPMethod:を@ "HEAD"に呼び出すことです。 https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableURLRequest_Class/Reference/Reference.html – jsd

+0

提案をいただきありがとうございます...これははるかに良い方法のように聞こえるようになります。 – Ron

関連する問題