我遇到与this question相同的问题,我删除应用时没有清理iCloud ubiquity容器。
但是当我尝试删除ubiquity容器时,我收到一条错误消息(操作无法完成。(Cocoa error 513.))。我该如何删除它? 这就是我正在使用的:
NSString *path = @"/private/var/mobile/Library/Mobile Documents/XXXXXX";
[[NSFileManager defaultManager] removeItemAtPath:path error:&error];
编辑:即使我删除设备上的应用程序和所有iCloud数据(设置应用程序 - > iCloud->存储和备份 - >管理存储 - >应用程序名称),仍有一些数据遗留下来iCloud ubiquity容器。这是我第一次启动应用程序时要删除的数据(如果用户重新安装应用程序)。
答案 0 :(得分:3)
您应该能够通过转到设置应用程序 - > iCloud->存储&存储&备份 - >管理存储 - >应用程序名称,然后删除所有文件。我想你可能只看到iCloud / Documents目录中的文件,所以你可能需要代码来清除其他内容。
或者使用Mac并转到〜/ Library / Mobile Documents并删除那里的文件。
要获取iCloud容器,请使用:
NSURL *iCloudURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:ubiquityID];
其中ubiquityID
是您的应用iCloud容器ID。
要列出iCloud容器中的所有文件,请使用iCloudURL
/*! Recursively lists all files
@param dir The directory to list
@param padding A string padding to indent the output depending on the level of recursion
*/
- (void)listAllFilesInDirectory:(NSURL*)dir padding:(NSString*)padding {
NSArray *docs = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:dir includingPropertiesForKeys:nil options:0 error:nil];
for (NSURL* document in docs) {
FLOG(@" %@ %@", padding, [document lastPathComponent]);
BOOL isDir;
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:document.path isDirectory:&isDir];
if (fileExists && isDir) {
[self listAllFilesInDirectory:document padding:[NSString stringWithFormat:@" %@", padding]];
}
}
}
要从ubiquity容器中删除内容,您需要使用这样的文件坐标:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
NSFileCoordinator* fileCoordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil];
[fileCoordinator coordinateWritingItemAtURL:fileURL options:NSFileCoordinatorWritingForDeleting
error:nil byAccessor:^(NSURL* writingURL) {
NSFileManager* fileManager = [[NSFileManager alloc] init];
NSError *er;
//FLOG(@" deleting %@", writingURL);
bool res = [fileManager removeItemAtURL:writingURL error:&er];
if (res) {
LOG(@" iCloud files removed");
}
else {
LOG(@" document NOT removed");
FLOG(@" error %@, %@", er, er.userInfo);
}
}];
}