4

写真アプリは、バックグラウンドで CameraRoll からすべてをアップロードする方法を教えてください。

日付範囲に基づいて、バックグラウンドで数百枚の写真をアップロードする必要があります。私のアプリは現在NSURLSession、次のコードを使用しています(私は思う...)しかし、これが機能するには、タスクスケジューラがJPGをアプリストレージのファイルにコピーする必要があります(iOS8でNSUrlSessionを使用したスト​​リームリクエストによるバックグラウンドアップロードを参照) 。アプリはバックグラウンドになります。数百枚の写真の場合、これには時間とストレージがかかりすぎます。

「ストリーム」アプローチを使用する方法、またはNSURLSessionバックグラウンドから追加のタスクを確実にスケジュールする方法はありますか? 私の開発者によると、iCloud にある可能性のある CameraRoll の写真が原因で、バックグラウンド スケジューリングが失敗する可能性があります。

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didSendBodyData:(int64_t)bytesSent
totalBytesSent:(int64_t)totalBytesSent totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend {
NSString *identifier = task.originalRequest.allHTTPHeaderFields[@"X-Image-Identifier"];

NSDictionary *d = [self sessionInfosDictionary];
NSURLSessionTaskInfo *info = d[identifier];
double p = (double)totalBytesSent/(double)totalBytesExpectedToSend;
info.progress = p;
[self saveSessionInfos:d];

for (id<PhotosUploaderDelegate>delegate in _delegates) {
    if ([delegate respondsToSelector:@selector(photoUploader:didUploadDataForAssetWithIdentifier:totalBytesSent:totalBytesExpectedToSend:)]) {
        [delegate photoUploader:self didUploadDataForAssetWithIdentifier:identifier totalBytesSent:totalBytesSent totalBytesExpectedToSend:totalBytesExpectedToSend];
    }
  }
}
4

2 に答える 2

1

タスクは簡単ではありません。やるべきことはたくさんあります。

[NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:] および +[NSURLSession uploadTaskWith...] メソッドから開始します。

注意が必要な部分は、アップロード エラーからの回復であることがわかります。-[NSURLSession getTasksWithCompletionHandler:] をチェックして、アプリケーションの各バックグラウンド アップロードを追跡する必要があります。ただし、最初は、バックグラウンド セッションの構成とアップロード タスクから始めます。

于 2015-03-26T08:56:19.473 に答える