iPhone: методы UIImagePickerControllerDelegate не вызваны? - PullRequest
0 голосов
/ 04 апреля 2011

У меня есть контроллер камеры, основанный на UIImagePickerController:

@interface CameraController : UIImagePickerController
    <UIImagePickerControllerDelegate>
    // <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
{
}

@end

Init генерирует предупреждение о том, что UINavigationControllerDelegate не реализовано (ожидается, так как я не хочу, чтобы мой объект был такимделегат):

- (id) init
{
    if(!(self = [super init]))
        return nil;

    super.sourceType =  UIImagePickerControllerSourceTypeCamera;
    // Commenting delegat does not help
    super.delegate = self;

    return self;
}

Несмотря на то, что он является UIImagePickerControllerDelegate делегатом, imagePickerController:didFinishPickingMediaWithInfo: не вызывается .Я также проверил, что два других метода делегата также не вызываются.

Если я утверждаю, что выполняется UINavigationControllerDelegate, imagePickerController:didFinishPickingMediaWith вызывается , но у меня происходит сбой dismissModalViewControllerAnimated:

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    ASSERT_VALID(picker);
    ASSERT_VALID(info);

    // Commenting does not help
    [picker autorelease];

    UIImage* image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];   
    ASSERT_VALID(image);

    // Image processing commented out

    // super.delegate = nil;
    // picker.delegate = nil;

    // [self dismissModalViewControllerAnimated:YES];
    // [super dismissModalViewControllerAnimated:YES];
    // [self performSelector:@selector(dismissModalViewControllerAnimated:) withObject:nil afterDelay:0.0f];
    // [self dismissModalViewControllerAnimated:NO];
    // [super dismissModalViewControllerAnimated:NO];
    [self performSelector:@selector(dismissModalViewControllerAnimated:) withObject:nil afterDelay:0.5f];
}

Я просмотрел несколько сообщений на этом контроллере представления CURSED.Ближайший UIImagePickerControllerDelegate не отвечает должным образом и iPhone - UIImagePickerControllerDelegate наследование , не помогло.

Есть идеи, что может быть на этот раз?Сразу возникают два вопроса: (1) что значит быть UINavigationControllerDelegate с вызовом моего обратного вызова с изображением, и (2) почему этот объект не может очиститься должным образом?

Спасибозаранее

1 Ответ

1 голос
/ 04 апреля 2011

Класс UIImagePickerController не должен быть подклассом.Справочное руководство гласит:

Этот класс предназначен для использования как есть и не поддерживает создание подклассов.

И для этого нет никаких оснований.Просто создайте подкласс UIViewController и внедрите делегатов.

Я успешно использовал его много раз.Я всегда заявлял, что мой контроллер представления реализует UINavigationControllerDelegate, но не реализовал ни один из методов этого протокола.

...