Tôi có ứng dụng dựa trên UIDocument
sử dụng NSFileWrapper
giây để lưu trữ dữ liệu. Trình bao bọc tệp 'master' chứa nhiều trình bao bọc tệp thư mục bổ sung, mỗi tệp trình bày một trang khác của tài liệu.UIDocument & NSFileWrapper - NSFastEnumerationMutationHandler trong khi thay đổi tệp trình bao bọc trong khi lưu
Bất cứ khi nào tôi thực hiện thay đổi đối với tài liệu trong khi UIDocument
đang lưu (trong writeContents:andAttributes:safelyToURL:forSaveOperation:error:
), ứng dụng gặp sự cố. Dưới đây là stack trace:
Có vẻ như rõ ràng rằng tôi đang thay đổi cùng một ví dụ của tập tin wrapper rằng UIDocument
được liệt kê trên ở chế độ nền. Thật vậy, tôi đã kiểm tra rằng khi trả về ảnh chụp nhanh của mô hình dữ liệu trong contentsForType:error:
, hàm đóng tệp phụ được trả về trỏ đến cùng một đối tượng như những đối tượng hiện đang cư trú (và đang được chỉnh sửa) trong mô hình dữ liệu chứ không phải bản sao.
- (id)contentsForType:(NSString *)typeName error:(NSError *__autoreleasing *)outError
{
if (!_fileWrapper) {
[self setupEmptyDocument];
}
return [[NSFileWrapper alloc] initDirectoryWithFileWrappers:[_fileWrapper fileWrappers]];
}
Đây là phương pháp bị xử phạt để thực hiện phương pháp này (theo WWDC 2012 Session 218 - Using iCloud with UIDocument).
Vì vậy, tôi cho rằng câu hỏi là: Cách tiếp cận này có thể là chuỗi an toàn không?
Tình huống có khác biệt nào khi trình bao bọc tệp chính fileWrappers
là các trình bao bọc tệp thư mục của chúng không? Nếu cách tiếp cận bị xử phạt sai, làm cách nào nên nó được thực hiện?
Tôi chưa gặp phải tình huống này, nhưng có vẻ như NSFileCoordinator có thể thực hiện công việc? –
@MikeM Bạn có thể đúng ở chỗ nó sẽ ngăn chặn sự cố, nhưng tôi lo lắng rằng nó có tiềm năng thực sự làm chậm mọi thứ. Thông thường, các bản cập nhật trong ứng dụng nhỏ và thường xuyên và cần phải có nội dung cập nhật để ứng dụng luôn đáp ứng. Tôi sẽ phải điều tra cách tiếp cận này hơn nữa và xem liệu nó có khả thi hay không. Tuy nhiên câu hỏi vẫn còn - là cách tiếp cận bị xử phạt đối với việc sử dụng UIDocument không phải là luồng an toàn? – Stuart