我正在为一些项目编写一个简单的 iCloud 管理器。
目前我有一个小的测试代码来查看我的经理是否成功地将文件从设备的本地存储中逐出(并且不会从 iCloud 存储中删除它们)。为此,文档说明您使用:
evictUbiquitousItemAtURL:错误:
删除指定的基于云的项目的本地副本。
我的测试片段如下所示:
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 强制再次下载文件,但这并没有解决问题。
任何人都知道会发生什么?