시나리오는 주소록을 호출하려는보기가 두 개 이상 있습니다. 따라서 각보기에서 위임자 코드를 복제하지 않기 위해 App Delegate의 머리글 및 .m 파일에 코드를 배치했지만 2 개의 해당 응용 프로그램의 맨 아래에 "@interface AddressBookDelegate"및 "@implementation AddressBookDelegate"를 사용했습니다peoplePickerDelegate가 대리인의 주소를받지 못하는 이유는 무엇입니까?
addressBookDelegate = (AddressBookDelegate *) [[UIApplication sharedApplication] delegate];
ABPeoplePickerNavigationController *abPicker = [[ABPeoplePickerNavigationController alloc]init];
abPicker.peoplePickerDelegate = self.addressBookDelegate;
[self presentModalViewController:abPicker animated:YES];
[abPicker release];
주소록은 모든보기에 잘 표시 위임 나는 다음과 같은 코드가 그럼 내보기에
@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;
}
@interface AddressBookDelegate : UIViewController <ABPeoplePickerNavigationControllerDelegate> {
AddressBookDelegate *addressBookDelegate;
}
@property (nonatomic, retain) AddressBookDelegate *addressBookDelegate;
@end
및
을 fiies-. 인식 할 수없는 선택기 인스턴스에 전송깨끗 컴파일 : [MyprogAppDelegate peoplePickerNavigationControllerDidCancel이 :] - 나는 주소와 같은 예약의 취소 버튼을 대리자를 호출하는 어떤 사용자 조치를 취할 때, 나는
가 crash- , 경고.peoplePickerDelegate가 물리적으로보기 자체와 동일한 파일에 있지 않을 때 주소 대리인 코드에 연결하려면 어떻게 연결해야합니까? 고마워.
ADDED 참고 : 나는 디버거를 사용하고보기 코드의 라인
abPicker.peoplePickerDelegate = addressBookDelegate;
에 중지 할 때, 나는 addressBookDelegate의 주소가 MyprogAppDelegate의 주소가 아닌 AddressBookDelegate 등으로 언급되는 것을 볼 수 나는 예상 했었을 것이다. 따라서 App Delegate 파일 내에서 주소록 위임 코드의 위치가 바뀌 었다고 생각하게됩니다.
AddressBookDelegate Cancel Delegate 코드가 AddressBookDelegate에 1000 바이트라고 말하면 내 응용 프로그램은 실제로 MyprogAppDelegate에 코드 1000 바이트를 "입력"하므로 충돌이 발생합니다. 그래서 어떻게 든 AddressBookDelegate의 주소 지정을 올바르게 설정하지 않습니다. 그것은 어쨌든 그것을 받아들입니다 ...
미안하다. 질문에 추가했습니다. 따라서 App Delegate IS에있는 사람들 선택기 위임 코드가 있습니다. 내 주소를 지정하는 데 문제가 있습니다. Pls는 질문의 맨 끝에 추가 된 텍스트를 적어 두었습니다. – Ric