2012-11-15 3 views
12

Я пытаюсь отправить изображение, сгенерированное в моем приложении, в другие приложения, используя UIDocumentInteractionController OpenIn Menu. Я спасая UIImage на диск с этим кодом:UIDocumentInteractionController OpenInMenu отключает приложение iOS

fileJpeg = [NSTemporaryDirectory() stringByAppendingPathComponent:@"activeImage.jpg"]; 
    jpegFileURL = [NSURL fileURLWithPath:fileJpeg]; 

    UIImage *imageToWrite = image; 

    [UIImageJPEGRepresentation(imageToWrite, 1.0) writeToFile:fileJpeg atomically:YES]; 

Я доступ к jpegFileURL в другом методе, чтобы отправить изображение по электронной почте с помощью MFMailComposeViewController, и она прекрасно работает, так что NSURL является действительным. Но когда я пытаюсь отправить изображение в другое приложение (просто отправляя, я не реализую никаких функций предварительного просмотра), приложение вылетает. Вот метод:

- (IBAction)openInOtherApp:(id)sender{ 

UIDocumentInteractionController *controller = [UIDocumentInteractionController interactionControllerWithURL: jpegFileURL]; 
controller.delegate = self; 
CGRect rect = self.view.frame; 
[controller presentOpenInMenuFromRect:rect inView:self.view animated:YES]; 
} 

В меню «Открыть» представлено меню «Открыть». Когда я нажимаю кнопку любого доступного приложения, он падает. При тестировании в устройствах iOS6 (6.0.1) и iOS5 (5.1.1) я не получаю никаких ошибок на консоли (только обычный EXC_BAD_ACCESS (код = 1, адрес ... сбой), но на устройстве iOS 4.3 (The приложение 4.3 совместим вверх) Я получаю эту ошибку в консоли:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFType actionSheet:clickedButtonAtIndex:]: unrecognized selector sent to instance 0x16b7f0' 

Я читал документацию от Apple на UIDocumentInteractionController и UIDocumentInteractionControllerDelegate, что я реализую в своем классе @interface, но ни один из дополнительных методов делегата, кажется, потребуются для моих потребностей или полезно в этом столкновении.

не могу понять, что это неправильно или отсутствует. Любая помощь будет оценена.

ответ

35

У вас проблема: this answer. Это была память. Я использовал UIDocumentInteractionController в качестве локальной переменной экземпляра, и ARC вскоре выпустила его. Превратили его в свойство класса, и теперь все работает.

2

Вы должны определить UIDocumentInteractionController * контроллер в вашем файле .h после @interface ... как

@interface sampleView <UIDocumentInteractionControllerDelegate> 
{ 
    UIDocumentInteractionController *controller; 
} 

приложение должно иметь доступ к этой переменной из всего модуля, а не только в порядке, где она называется из.

Смежные вопросы