2013-11-14 8 views
5

背景転送を使用してギャラリーからアセットをアップロードする最良の方法は何ですか? 「:「ファイルからでなければならない背景セッションでタスクをアップロードキャッチされない例外により 『NSGenericException』、理由にアプリを終了:」NSURLSession:バックグラウンド転送によるアセットのアップロード

は、例外が発生するのでbackgroundSessionConfigurationで作成NSURLSessionでは動作しませんuploadTaskWithRequest:fromData:ように思えます。例外の説明から判断すると、バックグラウンド転送はストリーミングアップロードタスクでは機能しません。

十分に適切です。 uploadTaskWithRequest:fromFile:は、既にディスクに保存されているデータをアップロードすることを考えるとき、まず気になるものです。しかし、NSURLSessionクラスリファレンスは、このメソッドはファイルurlでのみ機能することを示していますが、アセットのURLパスを取得すると「assets-library:// asset/...」から始まり、このパスを指定しても機能しません。

残っている唯一のオプションは、ファイルを資産ライブラリから一時ディレクトリにコピーし、ファイルURLをuploadTaskWithRequest:fromFile:にすることです。しかし、すでにアセットファイルがディスクに保存されているので意味がありません。 何か不足していますか?

更新:

テックトークイベントで、アップルのエンジニアと話をし、彼は背景NSURLSessionのみファイルのURLをサポートしていることを確認しました。実際には、アセットライブラリを一時ディレクトリにコピーし、そのファイルのURLをuploadTaskWithRequest:fromFile:に渡してバックグラウンドNSURLSessionでアップロードする必要があります。 この動作は将来変更される可能性があります。

答えて

2

また、ドキュメントのどこかで、 アップロード/ダウンロードURLはファイルhttp httpsスキームのみをサポートしています。背景はhttp/httpsのみをサポートします。
私は、技術的に有効なURLであるにもかかわらず、コアデータと資産ライブラリのURLは実際にはURLではなく、カスタムNSurlprotocol-sを作成することで実装されていない可能性が高いと思います。

私はあなたがアセットをいくつかのファイルに書き込んでそのファイルにURLを渡してタスクをアップロードすべきだと思っています。 私も資産をアップロードするプロジェクトに取り組んでいます。私はバックグラウンドセッションを使ってそれをnsursessionに変換し始めました。だから私はこの理論を証明するために今日後でこれを試してみるでしょう。

+0

まあ、そうです。ファイルのコピーは基本的に私が今やっていることです。どのようにあなたは養子縁組で進歩していますか? –

+0

あなたの推測は正しいと思われました。 –

+0

@RobertGeifmanだから基本的にuploadTaskWithRequest:fromData:は動作しませんか? – marciokoko

関連する問題