UIDocument
기반 응용 프로그램에 NSFileWrapper
을 사용하여 데이터를 저장합니다. 'master'파일 랩퍼에는 문서의 다른 페이지를 나타내는 많은 추가 디렉토리 파일 랩퍼가 들어 있습니다.저장 도중 파일 래퍼를 변경하는 동안 UIDocument 및 NSFileWrapper - NSFastEnumerationMutationHandler
UIDocument
이 저장 중일 때 (예 : writeContents:andAttributes:safelyToURL:forSaveOperation:error:
) 문서를 변경하면 앱이 다운됩니다.
내가 UIDocument
백그라운드에서 이상 열거되는 파일 래퍼의 동일한 인스턴스를 수정하고 명확 보인다 여기에 스택 추적입니다. 사실, 데이터 모델의 스냅 샷을 contentsForType:error:
에 반환 할 때 반환 된 하위 파일 래퍼는 현재 데이터 모델에서 현재 상주하고있는 (편집중인) 객체와 동일한 객체를 가리키고 사본은 가리키지 않는지 확인했습니다.
- (id)contentsForType:(NSString *)typeName error:(NSError *__autoreleasing *)outError
{
if (!_fileWrapper) {
[self setupEmptyDocument];
}
return [[NSFileWrapper alloc] initDirectoryWithFileWrappers:[_fileWrapper fileWrappers]];
}
이이 방법 (
WWDC 2012 Session 218 - Using iCloud with UIDocument 항)을 구현하는 방식으로 허가된다.
그럼 제가 가정 해 봅시다 : 이 접근법은 어떻게 스레드 안전 할 수 있습니까?
마스터 파일 래퍼 fileWrappers
자체가 디렉토리 파일 래퍼 일 때 상황이 어떻게 다릅니 까? 허가 된 접근 방식이 잘못 되었다면 어떻게 을해야합니까?
이 상황이 발생하지 않았지만 NSFileCoordinator가 작업을 수행 할 수있는 것처럼 보입니까? –
@MikeM 당신은 충돌을 막을 수 있다는 것이 맞을지 모르지만, 나는 그것이 일을 정말로 늦출 가능성이 있다고 걱정합니다. 종종 앱의 업데이트는 작지만 자주 발생하며 앱이 응답하기 위해서는 최신 콘텐츠가 필요합니다. 이 접근법을 자세히 조사하고 실행 가능한지 확인해야합니다. 그러나 문제는 여전히 남아 있습니다 - UIDocument 사용에 대한 승인 된 접근 방식은 스레드로부터 안전하지 않습니까? – Stuart