2012-08-31 4 views
12

때때로 iCloud에 저장된 UIDocument를 여는 데 문제가 있습니다. iCloud를 사용할 수 있는지 확인한 다음 NSMetaDataQuery의 결과를 얻은 후 앱의 시작 부분에 다음 코드를 호출합니다. 이것은 모든 경우의 98 %에서 작동합니다. 그것은 때로는 그냥 (예를 들어, 때때로 응용 프로그램을 다시 설치 한 후) completionHandler가 호출되지 않을 것이라는 점 : 당신은 코드에서 볼 수 있듯이, 나는 새로운 UIDocument 예 (FRNBDocument)를 초기화하는거야iCloud가 때때로 작동을 멈추는 이유는 무엇입니까?

FRNBDocument *doc = [[FRNBDocument alloc] initWithFileURL:fileURL]; 
[doc openWithCompletionHandler:^(BOOL success) { 

    NSLog(@"... doc: openedWithCompletionHandler"); 

, 그것 때문에 오래된 UIDocument가 아직 열리지 않으므로이 UIDocument가 열리지 않는 경우가 될 수 없습니다.

앱을 다시 작동시키는 유일한 방법은 그것을 죽인 다음 settings.app> iCloud> Documents & 데이터로 이동 한 다음 다시 켭니다. 응용 프로그램으로 돌아 가면 UIDocs가 문제없이로드됩니다.

다른 응용 프로그램 (예 : 세련된 xTrail)은 동일한 문제가 있으며 위에서 설명한 트릭을 수행 한 후에 다시 실행할 수 있음을 확인했습니다.

무슨 일입니까?

+0

iCloud에 연결하는 데 사용하는 코드와 나머지 파일 코드를 게시 할 수 있습니까? 여기에 충분한 코드가 없습니다. –

+0

@stackmonster 나는 정상적으로 게시 할 수있는 코드를 사용하지만 많은 도움이 될 것이라고 생각하지 않습니다. 애플에게 말하면 잘 알려진 버그처럼 보입니다. –

답변

3

좋아,이 iCloud 버그 것 같습니다. 나는 애플과 연락을했고 버그 리포트를 제출할 것을 제안했다. 그래서 그렇게했습니다 (id 12260670).

이제 간단히 타이머를 구현하는 방법을 설명합니다. UIDocs가 20 초 후에로드되지 않으면 AlertView를 표시하여 사용자에게 settings.app> iCloud> Documents & 데이터로 이동 한 다음 다시 켭니다.

매우 실망 스럽습니다. 믿을 수 없는.

+1

@stackmonster 버그가 아닌 경우 이유를 설명하십시오. 문제가 해결되면 답을 올바르게 표시해 드리겠습니다. 감사. BTW 나는이 질문에 대해 기술 지원 부각을 사용하려고 했으므로 버그가 아닌 경우 API를 설명해 주었다고 확신합니다. 그러나 그들은 TCI 발병률을 환불했고 나는 대신 버그를 신고해야한다고 말했다. –

0

iCloud에 접속 컨테이너의 위치 또는 iCloud를하면 할 수없는 경우

지정된 편재 컨테이너를 가리키는 URL, 또는 전무를 반환하는 기능

- (NSURL *)URLForUbiquityContainerIdentifier:(NSString *)containerID 

의 반환 호출을 필요로 저장 장치를 현재 사용자 또는 장치에 사용할 수 없습니다. 아이 클라우드로

Reference

내가 URL을 가져온 다음 데이터 만 더 동기화를 진행하면 내가 확인, 그 반응하지 않습니다.

NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]; 
if (ubiq) 
{ 
    NSLog(@"iCloud access at %@", ubiq); 
    [self loadDocument]; 
} 
else 
{ 
    NSLog(@"No iCloud access"); 
} 
+0

이것이 문제라고 생각하지 않습니다. 나는 유효한 ubiq를 얻었고 심지어 NSMetaDataQuery를 통해 결과를 얻는다. 그러나 iCloud가 멈 추면 결과를로드 할 수 없습니다. –

+0

[: NSNotificationCenter defaultCenter] addObserver : self 선택기를 사용하여 알림을 추가 할 수 있습니다. @selector (queryDidFinishGathering :) 이름 : NSMetadataQueryDidFinishGatheringNotification object : query]; –

+0

나는 그것을 모두했다. 전체 코드를 게시 할 수는 있지만 상당히 지루하고 요점을 말합니다. 나는 모든 것이 잘되고 그것이 95 %의 시간 동안 효과가 있음을 확인했습니다. 경우에 따라 때로는 iCloud가 재생되고 UIDocument가로드되지 않습니다. 그것은 분명히 알려진 문제입니다 - 다른 devs 같은 문제가있었습니다. –

1

비슷한 문제가 있습니다. NSMetadataQuery는 결과를 반환하지만 openWithCompletionHandler : 매우 가끔씩 완료되지 않아 앱의 데이터가로드되지 않습니다. 잠시 동안 문서를로드하기 전에 NSMetadataUbiquitousItemIsDownloadedKey를 확인하여 문제를 해결했습니다. 다운로드되지 않은 경우 evictUbiquitousItemAtURL을 호출 한 다음 UbiquitousItemAtURL을 다운로드 시작하십시오. NSMetadataUbiquitousItemIsDownloadedKey에 대한 NSMetadataQuery를 사용하여 폴링을 유지해야만 성공적으로 openWithCompletionHandler를 호출 할 수있었습니다. 이것은 문제를 해결하는 것으로 보입니다. 그러나 절망적으로 이것은 iOS 6에서 더 이상 작동하지 않거나 더 이상 항상 작동하지 않습니다. 더 나은 해결 방법을 찾거나 Apple의 버그에 대한 업데이트를 얻으려면 업데이트 해주십시오.

관련 문제