3

私はいくつかのプロジェクトのためにシンプルな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がファイルを再度ダウンロードするように強制したためではないことを確認しようとしましたが、これでは問題は解決しませんでした。

誰が何が起こっているのか考えていますか?

4

2 に答える 2

3

だから私は問題を理解しました。

私のコードは、実際にはローカル デバイスからファイルを正しく削除していました。これは、ユビキタス コンテナが実際にどのように機能するかを誤解していたためです。すべてのアプリには、現在のデバイスのローカル状態を示すローカル ユビキティ コンテナーがあるという印象を受けました (つまり、テスト デバイスにダウンロードしたファイルのみを意味します)。 、現在のデバイスにダウンロードしたかどうかに関係なく。

于 2012-10-03T11:03:34.603 に答える
3

あなたは試しましたかNSFileManagerremoveItemAtURL:error:

この方法を使用してiCloudからファイルを削除しますが、これは正常に機能します。

説明されているドキュメントに従って、evictUbiquitousItemAtURL:error:指定されたクラウドベースのアイテムのローカル コピーのみを削除します。

于 2012-09-27T14:35:29.027 に答える