2012-07-21 2 views
1

iCloud 컨테이너에서 내 응용 프로그램의 캐시 디렉토리로 파일을 복사하려고합니다. 계속 The operation couldn’t be completed. (Cocoa error 512.)을 내 로그에 계속 표시합니다. 이는 매우 광범위한 오류 의미 인 NSFileWriteUnknownError이거나 쓰기가 실패하고 iOS가 이유를 알지 못합니다.iCloud Cocoa Error 512

다음은 NSMetadataQuery이 완료되고 iCloud에 파일 이름이있을 때의 코드입니다. 아래 코드를 간단히 설명하겠습니다.

- (void)loadData:(NSMetadataQuery *)query { 

    NSArray *cache = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[cacheDirectory stringByAppendingString:@"/issues"] error:NULL]; 

    for (NSMetadataItem *item in [query results]) { 

     NSURL *name = [item valueForAttribute:NSMetadataItemURLKey]; 
     NSString *nameString = [item valueForAttribute:NSMetadataItemPathKey]; 

     NSError *error; 

     NSURL *cacheURL = [NSURL fileURLWithPath:cacheDirectory]; 
     NSURL *destination = [cacheURL URLByAppendingPathComponent:[NSString stringWithFormat:@"issues/%@", [[nameString stringByDeletingLastPathComponent] lastPathComponent]] isDirectory:YES]; 

     [[NSFileManager defaultManager] copyItemAtURL:[name URLByDeletingLastPathComponent] toURL:destination error:&error]; 

     } 

    } 

} 

이 앱은 신문사 문제를 동기화합니다. iCloud 문서 컨테이너에는 데이터가있는 폴더 (한 폴더는 5.1.12 일 수 있음)가 있으며 각 폴더에는 과 동일한 (5.1.12.pdf)의 PDF 파일이 있습니다.

왜 이런 일이 발생하는지 알고 싶습니다. 당신의 도움을 주셔서 감사합니다.

iCloud: file://localhost/private/var/mobile/Library/Mobile%20Documents/AppBundleID/Documents/5.3.12/ 

Local: file://localhost/var/mobile/Applications/F91E115B-ECED-403E-AB61-41F7A99EF928/Library/Caches/issues/5.3.12/ 

답변

2

iCloud는 파일을 iOS 장치에 동기화 할 때 먼저 파일을 사용할 수 있음을 알리기 위해 비어있는 데이터없는 파일을 응용 프로그램 컨테이너에 만듭니다. 이것이 귀하의 NSMetadataQuery 보고서입니다.

NSMetadataItem의 다른 키를 보면 아이템이 아직 다운로드되지 않았다는 메시지가 나타납니다.

해당 파일을 복사하거나 열려면 먼저 iCloud에 파일을 다운로드해야합니다. 항목의 경로에서 조정 된 읽기를 수행하면 (열기 또는 복사 작업을 수행 할 때처럼) 암시 적으로 파일을 다운로드합니다.

0

중단 점 및/또는 NSLog 코드를 단계별로 실행하십시오. 당신이 의도했던 디렉토리 경로를 반환하지 않는 논리 오류가있을 수 있습니다.

2

해결!

copyItemAtURL은 파일이 이미 있으면 오류를 반환합니다. 대부분의 경우 영구 저장 게임과 같은 것을 만들고 새로운 변경 사항으로 파일을 덮어 쓰고 싶을 것입니다.

BYTE *data = NULL;//Put your file data in here 
    int FileSize = 0;//replace with your file size 
    NSData *myData = [[NSData alloc] initWithBytes:data length:FileSize]; 
    [myData writeToFile:[FileURL path] atomically:YES]; 
iCloud에

에 파일을 쓸 수있는이 같은

사용 뭔가