Метод делегата ABNewPersonViewController не вызывается при запуске действия кнопки - PullRequest
2 голосов
/ 16 марта 2012

Я использую ABNewPersonViewController.Я сохраняю кнопку Готово (rightBarButtonItem из ABNewPersonViewController) на другую кнопку, чтобы метод делегата

- (void)newPersonViewController:(ABNewPersonViewController *)newPersonViewController didCompleteWithNewPerson:(ABRecordRef)person 

не вызывался до тех пор, пока не будет нажата кнопка Готово.Мой viewDidLoad метод имеет вид

- (void)viewDidLoad {
[super viewDidLoad];


self.defaultRightBarButtonItem = self.navigationItem.rightBarButtonItem;

UIBarButtonItem *saveBtn = [[UIBarButtonItem alloc] 
                            initWithBarButtonSystemItem:UIBarButtonSystemItemSave 
                            target:self 
                            action:@selector(actionSave:)];
self.navigationItem.rightBarButtonItem = saveBtn;
[saveBtn release];
}

При нажатии кнопки в другом представлении я запускаю готовое действие кнопки

[self.defaultRightBarButtonItem.target 
 performSelector:self.defaultRightBarButtonItem.action
 withObject:self.defaultRightBarButtonItem.target];

Иногда метод вызывается, а иногда не работает.Если я просто отредактирую поле адреса электронной почты или номер телефона контакта и попытаюсь сохранить его, метод будет вызван.Но если я попытаюсь отредактировать адресные поля и затем сохранить, метод не будет вызван.Что может быть причиной этого.

Редактировать: Обнаружено, что метод делегата не запускается при загрузке нового представления.И это происходит (загружается новый вид) только тогда, когда такие поля, как Страна, Рингтон, редактируются.Это когда метод делегата не запущен.Во всех других случаях метод делегата срабатывает.Теперь есть предложения?

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

performSelector эквивалентно вызову метода объекта, которому он был отправлен.Если выполнение входит в обработчик «нажатия кнопки в другом представлении» и выполняет код

[self.defaultRightBarButtonItem.target 
 performSelector:self.defaultRightBarButtonItem.action
 withObject:self.defaultRightBarButtonItem.target];

, но, в свою очередь, никогда не входит в селектор, определенный в действии, возможны только следующие случаи:

  • self.defaultRightBarButtonItem или self.defaultRightBarButtonItem.target равно nil
  • self.defaultRightBarButtonItem.action равно nil

Вместо performSelector попробуйте вызвать напрямуюactionSave: метод и зарегистрируйте все поля выше.

0 голосов
/ 24 марта 2012

Мои 2 цента: ничто в коде вопроса не указывает на ошибку. Но почему такой обходной вызов вызывает метод сохранения (выполняя действие кнопки сохранения над целью кнопки сохранения). Как насчет:

[self saveAction:nil];
...