iOS 8.1 アプリNSURLSessionDownloadTask
では、バックグラウンドでアーカイブをダウンロードするために使用していますが、これは非常に大きくなることがあります。
すべて正常に動作しますが、電話のディスク容量が不足するとどうなりますか? ダウンロードが失敗し、それがディスク容量の残りの問題であったことを示しますか? 事前に確認する良い方法はありますか?
iOS 8.1 アプリNSURLSessionDownloadTask
では、バックグラウンドでアーカイブをダウンロードするために使用していますが、これは非常に大きくなることがあります。
すべて正常に動作しますが、電話のディスク容量が不足するとどうなりますか? ダウンロードが失敗し、それがディスク容量の残りの問題であったことを示しますか? 事前に確認する良い方法はありますか?
次のように、ユーザー デバイスの使用可能なディスク容量を取得できます。
- (NSNumber *)getAvailableDiskSpace
{
NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfFileSystemForPath:@"/var" error:nil];
return [attributes objectForKey:NSFileSystemFreeSize];
}
ダウンロードするファイルのサイズを取得するには、ダウンロードを開始する必要があります。NSURLSession の便利なデリゲート メソッドがあり、タスクの再開時に期待されるバイト数を正しく取得できます。
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes
{
// Check if we have enough disk space to store the file
NSNumber *availableDiskSpace = [self getAvailableDiskSpace];
if (availableDiskSpace.longLongValue < expectedTotalBytes)
{
// If not, cancel the task
[downloadTask cancel];
// Alert the user
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Low Disk Space" message:@"You don't have enough space on your device to download this file. Please clear up some space and try again." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
}
}