Почему происходит сбой моего приложения при вызове метода в self.parentViewController? - PullRequest
0 голосов
/ 23 апреля 2011

В своем коде я делаю следующее:

-(void)pushCropImageViewControllerWithDictionary:(NSDictionary *)dictionary {
civc = [[CropImageViewController alloc] init];
[self presentModalViewController:civc animated:YES];
civc.myImage.image = [dictionary objectForKey:UIImagePickerControllerOriginalImage];

}

Итак, у меня есть модальное представление в моем приложении.Когда это модальное представление закрывается, я хочу вызвать метод из родительского представления (представление, которое называется pushCropImageViewControllerWithDictionary), например так:

-(void)viewWillDisappear:(BOOL)animated {
[super viewWillAppear:animated];
[(AddNewItemViewController *)self.parentViewController addCroppedPicture:screenshot];

}

Но он продолжает аварийно завершать работу со следующимисообщение:

Завершение приложения из-за необработанного исключения 'NSInvalidArgumentException', причина: '- [UITabBarController addCroppedPicture:]: нераспознанный селектор, отправленный экземпляру 0x4d15930'

Может кто-нибудь сказатьмне что я делаю не так?Я включаю заголовок для AddNewItemViewController, поэтому селектор должен быть распознан.Может кто-нибудь подсказать мне, как я могу сделать это правильно?Спасибо.

РЕДАКТИРОВАТЬ: Объявление addCroppedPicture:

-(void)addCroppedPicture:(UIImage *)image;

Сама реализация пока пуста.

1 Ответ

2 голосов
/ 23 апреля 2011

Очевидно, self.parentViewController - это не экземпляр AddNewItemViewController, а контроллер панели вкладок. Отсюда крушение.

Правильное решение - создать делегата:

-(void)pushCropImageViewControllerWithDictionary:(NSDictionary *)dictionary
{
    civc = [[CropImageViewController alloc] init];
    civc.delegate = self;
    [self presentModalViewController:civc animated:YES];
    ...
}

Чтобы отправить сообщение обратно делегату:

-(void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [self.delegate addCroppedPicture:screenshot];
}

Вам решать объявить протокол делегата:

@protocol CropImageDelegate <NSObject>
- (void)addCroppedPicture:(UIImage*)image;
@end

И добавить свойство для делегата в CropImageViewController:

@property (nonatomic, assign) id<CropImageDelegate> delegate;

И, наконец, настройте контроллер представления в соответствии с этим протоколом делегата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...