When opening UIDocuments from a closed state, I understand that it is it done on another thread. My question is, if I have code on my main thread that will access the document (like performing a fetch request), how is it guaranteed that the document will be open before I try to access it if the opening of the closed document is done asynchronously?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
Instead of trying to block a thread, block your application's user from accessing the document until it is open. That's what the completion handler is for.
- (void)openWithCompletionHandler:(void (^)(BOOL success))completionHandler
When the completion handler is invoked simply dismiss whatever temporary user interface you display while the document is opening. This way no threads are blocked while the document is opening, and the application remains responsive (albeit useless).
回答2:
You should use documentState
property of UIDocument
class. For more detail refer this document documentState description.
It returns following enumerators to check:
enum {
UIDocumentStateNormal = 0,
UIDocumentStateClosed = 1 << 0,
UIDocumentStateInConflict = 1 << 1,
UIDocumentStateSavingError = 1 << 2,
UIDocumentStateEditingDisabled = 1 << 3 }; typedef NSInteger UIDocumentState;
From Description:
UIDocumentStateNormal
is what you want, as:
The document is open, editing is enabled, and there are no conflicts or errors associated with it.