Это в основном старая проблема управления памятью.
[UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:path]]
возвращает объект с автоматическим освобождением, поэтому он будет автоматически освобожден вскоре после завершения блока кода. Я предполагаю, что это не похоже на presentModalViewController
, который сохранит копию для вас, но это побочный момент.
По сути, вам нужно сохранить его до окончания блока кода. Более раздражающей частью является отслеживание того, что делает docController, чтобы вы не теряли память. Вам нужно будет проверить результат от
[docController presentOptionsMenuFromRect:rect inView:self.view animated:YES];
Если он возвращает NO, это означает, что меню никогда не появлялось, и поэтому вы должны сразу же сделать его (если вы уже сделали сохранение).
Однако, если он возвращает YES, вам нужно реализовать методы делегата для docController и освободить его, когда меню закрывается (в этом случае это будет, когда:
- (void)documentInteractionControllerDidDismissOptionsMenu:(UIDocumentInteractionController *)controller
вызывается.
EDIT:
Я хочу сделать здесь поправку:
Предыдущий ответ вылетит, если всплывающее меню будет закрыто. По сути, нет действительно никакого хорошего способа создать одноразовый DocController. Вместо этого я думаю, что лучше всего создать по одному для каждого файла, который вам нужен в viewcontroller, и освободить его, когда вы закончите. В противном случае вы столкнетесь с множеством возможных случаев, когда DocController выйдет слишком рано и рухнет.