私はいくつかのプロジェクトのためにシンプルなiCloudマネージャーをプログラミングしています。
現在、マネージャーがデバイスのローカルストレージからファイルを正常に削除する(そしてiCloudストレージからファイルを削除しない)かどうかを確認するための小さなテストコードがあります。これを行うために、ドキュメントには次のように記載されています。
evictUbiquitousItemAtURL:error:
指定されたクラウドベースのアイテムのローカルコピーを削除します。
私のテストスニペットは次のようになります。
if ([self evictLocaleFile:@"myTestFile.txt"])
NSLog(@"File was evicted successfully!");
[self listAllLocalFiles];
ここでの考え方は、最初に指定されたファイルを削除し、次にローカルiCloudフォルダー内のローカルファイルを一覧表示して、それがまだ存在するかどうかを確認することです。
最初の方法は、次のように指定されたファイルを削除するだけです。
-(BOOL) evictLocaleFile:(NSString *)name
{
NSURL *deletionURL = [[NSURL alloc] initFileURLWithPath:[ubiquityContainerURL path]];
deletionURL = [deletionURL URLByAppendingPathComponent:@"Documents" isDirectory:YES];
deletionURL = [deletionURL URLByAppendingPathComponent:name isDirectory:NO];
NSLog(@"EVICTION URL: %@", deletionURL.path);
NSError* err = nil;
BOOL didEvict = [[NSFileManager defaultManager] evictUbiquitousItemAtURL:deletionURL error:&err];
if (err != nil)
{
NSLog(@"Eviction error: %@", err.description);
}
return didEvict;
}
ローカルファイルを一覧表示する方法は次のようになります。
-(NSArray*) listAllLocalFiles
{
NSString *localPath = [[ubiquityContainerURL path] stringByAppendingFormat:@"/Documents"];
NSLog(@"PATH: %@", localPath);
NSArray* files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:localPath error:nil];
for (NSString* fileName in files)
{
NSLog(@"FILE %@", fileName);
}
return files;
}
奇妙なことに、プログラムを実行すると、ファイルが正常に削除されたと表示されます。しかし、それでもファイルはロケールファイルの下に存在するものとしてリストされていますか?この時点でファイルを完全に削除して存在しないようにする必要がありますか?ファイルが削除されない理由がわかりません。
私は最初にファイルを保存し、次にWIFIをオフにしてコードを再実行し、iCloudがファイルを再度ダウンロードするように強制したためではないことを確認しようとしましたが、これでは問題は解決しませんでした。
誰が何が起こっているのか考えていますか?