2014-01-11 35 views
2

我有和this question相同的问题,当我删除应用程序时,iCloud无处不在的容器没有被清理。如何删除iPhone上的iCloud无处不在容器?

但是,当我尝试删除无处不在容器时,我收到一条错误消息(操作无法完成(Cocoa error 513.))。我如何删除它? 这是我使用的是什么:

NSString *path = @"/private/var/mobile/Library/Mobile Documents/XXXXXX"; 
[[NSFileManager defaultManager] removeItemAtPath:path error:&error]; 

编辑:即使我删除该应用程序在设备上,所有的iCloud数据(设置APP-> iCloud->存储&备份 - >管理存储 - >应用名称)iCloud无处不在容器中仍有一些数据。这是我第一次启动应用程序时要删除的数据(以防用户重新安装应用程序)。

+0

在error.userInfo NSLog中发布错误的详细信息(@“error is%@”,error.userInfo); –

+0

最好像这样获得无处不在的容器'NSURL * iCloudURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:_ubiquityID];'其中'_ubiquityID'是您的应用程序的iCloud容器标识符。 –

+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]]; 
     } 

    } 
} 

,并从你需要用户fileCoordinator像这样无处不在的容器中删除的东西:

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); 
                } 
               }]; 
} 
+0

协调器允许同时读写,您可以请求使用同一个容器URL同时读写,然后简单地读取文件列表并同时擦除它们。 – Andy