Подтвердить что ты не робот

UIDocumentInteractionController OpenInMenu сбой приложения iOS

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

    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, но ни один из необязательных методов делегатов, по-видимому, не требуется для моих нужд или не помогает в этом сбое.

Невозможно понять, что не так или нет. Любая помощь будет оценена.

4b9b3361

Ответ 1

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

Ответ 2

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

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

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