2012-03-12 3 views
13

NSFileManagerstartDownloadingUbiquitousItemAtURL을 사용하여 iCloud에서 로컬 복사본으로 파일을 다운로드합니다 (로컬에는 아직 파일 복사본이 없습니다). 이 프로세스에 대한 콜백을 찾을 수없는 것 같습니다. 요청 된 파일이 (로컬 복사본으로) 다운로드가 완료되었다는 것을 앱에 알리기 위해 콜백이 필요하므로 다른 작업이 파일의 내용을 읽기 시작할 수 있습니다.iCloud : NSFileManager의 시작을위한 콜백 유비쿼터스 아이템 유료 다운로드?

파일이 다운로드되었는지 확인할 수 있습니다. 그러나 그것은 지속적으로 투표에 참여할 것입니다. 타이머를 설정하지 않고이 작업을 수행 할 수있는 방법이 있습니까?

답변

28

이 방법은 Apple's documentation에 기반한 파일 코디네이터와 함께 사용해야합니다. 그래서 당신과 같이 파일 코디네이터를 사용해야합니다 :

NSURL *itemURL = nil; // this is the URL you want to read from 

__block NSData *data = nil; 
NSError *error = nil; 
NSFileCoordinator *coordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil]; 
[coordinator coordinateReadingItemAtURL:itemURL options:0 error:&error byAccessor:^(NSURL *newURL) { 
    data = [NSData dataWithContentsOfURL:newURL]; 
}]; 

이 그러나, 동기가 될 것입니다, 당신은 비동기 적으로 무언가를하고 싶었다 그래서 만약, 당신은 너무로 블록을 사용할 수

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    // read info from the URL using the code above 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     // handle data read from the URL 
    }); 
}); 
+1

는 NSFileCoordinator의 방법은 동기 모드에서 아름답게 작동합니다. 나는 또한 프로젝트의 나중 단계에서 비동기 버전을 필요로했다. 고맙습니다. – user523234

+0

@SpaceDog 당신은 100 % 권리입니다. 나는이 API를 솔직하게 다루고있다. – mattsven

+3

애플사가 만든 API는 1) 빨기도하고, 혼란스럽고, 불완전하고, 불완전하고, 나쁜 것으로 기록 된 2 가지 범주와, 2) 통과 할 수있는 사람으로 나눌 수 있습니다. 잘 설계된 API는 하나도 없습니다. 날 오해하지 마. 나는 애플이하는 제품을 좋아하지만 개발자와 API를 다루는 애플은 높은 수준의 사람들이 알고있는 애플이 아니다. 반대로. – SpaceDog

-1

을 위해 당신은 또한이 같은 필요 해요 iCloud에 올바르게 업로드 (아무것도 다른 작동하지 않았다 : |)

NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]; 

    NSString *FileNS = @"myfile.dat"; 
    NSURL *FileURL = [[ubiq URLByAppendingPathComponent:@"Documents"] URLByAppendingPathComponent:FileNS ]; 


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

op가 다운로드 요청이며 업로드하지 않음 – SpaceDog