Возникла проблема при удалении modalviewcontroller из кнопки UINavigation Controller Done - PullRequest
0 голосов
/ 16 января 2012

При нажатии кнопки «Готово» приложение вылетает и выдает сообщение, что программа получила сигнал SIGABRT.

В ModalViewController.h делегированный протокол и метод

@protocol ModalViewDelegate <NSObject>

-(void) dismissModalView:(UIViewController *) viewController;

@end

@interface Infoviewcontroller : UIViewController <ModalViewDelegate>

{
    id<ModalViewDelegate> dismissDelegate;
}

@property (nonatomic, retain) id<ModalViewDelegate> dismissDelegate;

@end

В modalviewcontroller. м файл

@synthesize dismissDelegate;

-(void) dismissModalView:(UIViewController *) viewController;
{

   [self dismissModalViewControllerAnimated:YES];

}
@end

В определении готовой кнопки

UIButton* backButton = [UIButton buttonWithType:101]; 
[backButton addTarget:self action:@selector(dismissView:) forControlEvents:UIControlEventTouchUpInside];
[backButton setTitle:@"Done" forState:UIControlStateNormal];

// create button item
UIBarButtonItem* backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];

// add the button to navigation bar
self.navigationItem.leftBarButtonItem = backItem;
[backItem release];


-(void) dismissView: (id)sender

{
    [UIViewController dismissDelegate];
}

При нажатии кнопки «Готово» приложение вылетает и выдает сообщение, что программа получила сигнал SIGABRT. Так что я думаю, что я делаю что-то не так в методе dismissView кнопки done, поэтому он выдает сообщение о том, что UIViewController dismissDelegate нераспознанный селектор

Помощь будет оценена.

Спасибо

Ответы [ 2 ]

3 голосов
/ 16 января 2012

Вы вызываете метод класса в UIViewController, который не существует (dismissDelegate - который вы определили как свойство Infoviewcontroller).

Я думаю, что вы несколько запутались с использованием ModalViewDelegate, позвольте мне попытаться объяснить ...

В Руководстве по программированию контроллера Apple View рекомендуется, чтобы ViewController, представляющий модальный контроллер, отвечал за его отклонение. Поэтому вам нужен способ, чтобы модальный контроллер мог общаться с представляющим контроллером.

Итак ... Ваш текущий контроллер должен соответствовать вашему протоколу ModalViewDelegate (а не вашему модальному контроллеру, как у вас здесь).

Когда вы представляете модальный контроллер представления, вы устанавливаете его делегата на себя (self является представляющим контроллер представления).

Ваш метод dismissView должен быть таким:

-(void) dismissView: (id)sender
{
    [self.dismissDelegate dismissModalView:self];
}

На самом деле, вам, вероятно, даже не нужно передавать параметр UIViewController делегату, поскольку вы не будете использовать его в конечном итоге.

Наконец, ваше свойство dismissDelegate действительно не должно сохраняться, оно должно быть назначено вместо него (в противном случае вы получите циклическое сохранение отношения).

0 голосов
/ 16 января 2012

Попробуйте это:

-(void) dismissView: (id)sender

{
    [self dismissModalViewControllerAnimated:YES];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...