次のコード スニペットを使用して、zip ファイルをダウンロードし、ダウンロードしたファイルを移動したいと思います。
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL isDir;
NSString *path = ...;
NSString *targetPath = ...;
NSString *targetDirectory = [targetPath stringByDeletingLastPathComponent];
if (![fileManager fileExistsAtPath:targetDirectory isDirectory:&isDir] && !isDir)
{
NSError *dirError;
if (! [fileManager createDirectoryAtPath:targetDirectory withIntermediateDirectories:YES attributes:nil error:&dirError])
{
NSLog(@"%@", dirError.localizedDescription);
}
}
//...
if ([fileManager moveItemAtPath:path toPath:targetPath error:&error])
{
success = YES;
}
テスト デバイスで問題なく動作し、iOS 8.x でも問題なく動作しました。現在、一部のベータ テスターは、ターゲット ディレクトリが存在しないため、iOS 9.x のデバイスで zip ファイルの移動が失敗することを報告しています。一般的ではなく、iOS 9.x を実行している少数のデバイスでのみ発生します。テスト デバイスを iOS 9.1 に更新しましたが、引き続き動作します。zip ファイルは、すべてのテスト ユーザーで同じです。
パスはハードコーディングされていませんが、コード スニペットの直前に生成されます。zip ファイルは常に一時ルート ディレクトリからサブパス /map/maps/deu/deu_1.0.zip にコピーされます。
path = @"/private/var/mobile/Containers/Data/Application/0EAF2FEE-4E9F-4826-94AE-7D31D2B4D8E7/tmp/deu_1.0.zip";
targetPath = @"/var/mobile/Containers/Data/Application/0EAF2FEE-4E9F-4826-94AE-7D31D2B4D8E7/Documents/map/maps/deu/deu_1.0.zip";
targetDirectory = @"/var/mobile/Containers/Data/Application/0EAF2FEE-4E9F-4826-94AE-7D31D2B4D8E7/Documents/map/maps/deu";
パスは、一時ディレクトリ resp のルート パスを読み取ることによって常に生成されます。ドキュメントディレクトリにファイル名(deu_1.0.zip)を追加することにより、それぞれ。サブパス (/map/maps/deu/deu_1.0.zip):
ヘルパー クラス MCPath から:
+ (NSString *)directoryDocuments
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *directory = [paths objectAtIndex:0];
return directory;
}
+ (NSString *)directoryTemporaryFiles
{
return NSTemporaryDirectory();
}
パスが生成される方法のスニペットを次に示します (ファイル名は URL から読み取られますが、常に同じ URL であり、サブパスは mapInfo オブジェクトに格納されます)。
NSString *path = [[MCPath directoryTemporaryFiles] stringByAppendingPathComponent:[url lastPathComponent]];
NSString *targetPath = [[MCPath directoryMap] stringByAppendingPathComponent:[mapInfo subPath:YES]];
とにかく、一番上のコード スニペットは、ターゲット ディレクトリが存在するかどうかを確認します。そうでない場合は、ターゲット ディレクトリが作成されます。最後に、zip ファイルを一時ディレクトリからターゲット ディレクトリに移動する必要があります。それが意図であり、テスト デバイスでも問題なく動作します。ただし、すべてのデバイス、特に iOS 9.x を実行しているデバイスではそうではありません。誰かが理由を知っていますか?ディレクトリの作成中またはファイルの移動中に iOS 9.x に既知のバグがあるかどうか誰か知っていますか?
ご回答ありがとうございます。