UIDocumentInteractionController для меню "Открыть" - не работает
Я применил UIDocumentInteractionController для отправки файлов в другие приложения. Файл является .txt файлом.
Здесь код:
UIDocumentInteractionController *interactionController = [[UIDocumentInteractionController alloc] init];
[interactionController setURL:[NSURL fileURLWithPath:filePath]];
[interactionController setUTI:@"public.text"];
[interactionController setDelegate:self];
[interactionController presentOpenInMenuFromBarButtonItem:actionBarButtonItem animated:YES];
Меню открывается отлично, показывая приложения, такие как Pages, Dropbox и т.д., как я ожидаю. Но когда я нажимаю один из них, меню "Открыть" отменяется и никаких действий не выполняется (файл не отправляется, и целевое приложение никогда не открывается.
Я попытался реализовать методы делегата documentInteractionController:canPerformAction:
и documentInteractionController:performAction:
для запуска копирования: и печать: вызовы с использованием меню опций (в отличие от открытого в меню), и это привело к тому, что меню было только с перечисленными страницами, но это все еще не работает.
Как это можно решить?
Ответы
Ответ 1
Я нашел ответ, и это управление памятью. Я создаю UIDocumentInteractionController, а затем представляю его, но у меня нет его как переменной экземпляра. ARC освобождает его, прежде чем он сможет что-либо сделать. Это включает отправку документа во внешнее приложение.
Эта ошибка не появлялась на iPhone, но на iPad она дает ошибку, потому что архитектура popover работает по-другому, и в итоге она пытается извлечь ее, когда она освобождена. Это то, что предупредило меня об ошибке.
Ответ 2
Эта ошибка также появляется на iPhone/iPod. Просто установите:
@property (nonatomic, retain) UIDocumentInteractionController *docController;
и он будет сохранен, и документ будет передан новому приложению.
Ответ 3
достаточно добавить следующий код:
[interactionController retain];