Сценарий состоит в том, что у меня есть несколько видов, которые хотят вызвать адресную книгу. Чтобы не дублировать код делегата в каждом представлении, я нашел код в заголовке Append и файле .m, но с помощью «@interface AddressBookDelegate» и «@implementation AddressBookDelegate» в нижней части 2-х соответствующих приложений Делегат fiies-Почему людиPickerDelegate не получают адрес делегата?
@interface AddressBookDelegate : UIViewController <ABPeoplePickerNavigationControllerDelegate> {
AddressBookDelegate *addressBookDelegate;
}
@property (nonatomic, retain) AddressBookDelegate *addressBookDelegate;
@end
и
@implementation AddressBookDelegate
@synthesize addressBookDelegate;
- (void)peoplePickerNavigationControllerDidCancel: (ABPeoplePickerNavigationController *)peoplePicker
{
[self dismissModalViewControllerAnimated:YES];
}
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
{
[super dismissModalViewControllerAnimated:YES];
...get stuff from the Address Book...
return NO;
}
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
{
return NO;
}
Тогда в моих взглядов у меня есть следующий код:
addressBookDelegate = (AddressBookDelegate *) [[UIApplication sharedApplication] delegate];
ABPeoplePickerNavigationController *abPicker = [[ABPeoplePickerNavigationController alloc]init];
abPicker.peoplePickerDelegate = self.addressBookDelegate;
[self presentModalViewController:abPicker animated:YES];
[abPicker release];
Адресная книга отображает отлично во всех видах. Но когда я принимать какие-либо действия пользователя, который будет ссылаться делегат, как адрес кнопку Отмена книги, я crash-
- [MyprogAppDelegate peoplePickerNavigationControllerDidCancel]: непризнанные селектор направлен например
Он компилирует чистый , никаких предупреждений.
Как подключить peoplePickerDelegate для соединения с кодом делегирования адресов, когда он физически не находится в том же файле, что и само представление? Спасибо.
ADDED Примечание: при использовании отладчика и остановки на линии
abPicker.peoplePickerDelegate = addressBookDelegate;
в коде представления, я вижу, что адрес для addressBookDelegate, как утверждается, адрес MyprogAppDelegate, не AddressBookDelegate, как Я мог бы ожидать. Это заставляет меня думать, что смещение в код делегата адресной книги отключено в файле делегата приложения.
Если адрес AddressBookDelegate Cancel Делегат сказал 1000 байтов в AddressBookDelegate, мое приложение фактически «вводит» код 1000 байтов в MyprogAppDelegate и поэтому выходит из строя. Поэтому я как-то неправильно настраиваю адресацию AddressBookDelegate. Это мой взгляд на него в любом случае ...
У меня есть это, извините, я предполагал, что это было очевидно. Я добавил его к вопросу. Таким образом, код делегата сборщика людей находится в App Delegate IS там. В моем обращении к этому есть что-то нехорошее, связанное с ним. Обратите внимание на добавленный текст в нижней части вопроса, если это прояснит что-либо. – Ric