2014-01-11 2 views
2

this question과 동일한 문제가 있는데, 앱을 삭제할 때 iCloud ubiquity 컨테이너가 정리되지 않습니다.iPhone에서 iCloud 유비쿼터스 컨테이너를 삭제하는 방법은 무엇입니까?

하지만 유비쿼터스 컨테이너를 삭제하려고하면 오류 메시지가 표시됩니다 (작업을 완료 할 수 없습니다 (코코아 오류 513.)). 어떻게 삭제합니까?

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

편집 : 나는 (설정 APP-> iCloud-> 저장 & 백업 - 관리> 스토리지 기반> 앱 이름 장치의 응용 프로그램 및 모든 iCloud에 데이터를 삭제하는 경우에도 이것은 내가 사용하고 무엇인가) iCloud ubiquity 컨테이너에는 여전히 일부 데이터가 남아 있습니다. 이것은 앱이 처음 시작될 때 삭제하려는 데이터입니다 (사용자가 앱을 다시 설치하는 경우).

+0

error.userInfo의 오류 세부 정보 게시 NSLog (@ "error is % @", error.userInfo); –

+0

'NSURL * iCloudURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier : _ubiquityID];'와 같은 유비쿼터스 컨테이너를 얻는 것이 가장 좋습니다. '_ubiquityID'는 앱의 iCloud 컨테이너 식별자입니다. –

+0

그리고 귀하의 앱은이 디렉토리 내의 내용을 제거 할 권한만을 가질 수 있습니다. –

답변

3

설정 App-> iCloud-> Storage & Backup-> Manage Storage-> App Name으로 이동하여 파일을 삭제할 수 있어야합니다. 나는 당신이 iCloud/Documents 디렉토리에있는 파일 만 볼 수 있다고 생각하지만 다른 것을 지우려면 코드가 필요할 수 있습니다.

Mac을 사용하고 ~/Library/Mobile Documents로 이동하여 파일을 제거하십시오. ubiquityID이 앱을 iCloud에 컨테이너 ID입니다

NSURL *iCloudURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:ubiquityID]; 

:

는 iCloud에 컨테이너 사용이를 얻으려면.

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

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 뭔가를 필요로 편재 컨테이너에서 물건을 삭제하려면 iCloud에 컨테이너에있는 모든 파일을 나열하려면

+0

코디네이터가 동시에 읽고 쓸 수 있습니다. 동일한 컨테이너 URL을 사용하여 동시에 읽고 쓰기를 요청한 다음 파일 목록을 읽고 동시에 지울 수 있습니다. – Andy

관련 문제