這種情況是我有多個想要調用地址簿的視圖。爲了不在每個視圖中重複委託的代碼,我在App Delegate的頭文件和.m文件中找到了代碼,但是在2個相應的應用程序的底部使用了「@interface AddressBookDelegate」和「@implementation AddressBookDelegate」代表fiies-爲什麼peoplePickerDelegate沒有獲得代表的地址?
@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以連接到地址委託代碼,當它與物理視圖本身不在同一個文件中時?謝謝。
補充說明:當我使用調試器和停止在視圖代碼行
abPicker.peoplePickerDelegate = addressBookDelegate;
,我看到地址addressBookDelegate據稱是MyprogAppDelegate的地址,而不是AddressBookDelegate作爲我可能會預料到的。這使我認爲在App Delegate文件中關閉了地址簿委託代碼的位移。
如果AddressBookDelegate取消委託代碼被稱爲AddressBookDelegate 1000字節,我的應用程序實際上是「輸入」1000字節代碼到MyprogAppDelegate,並因此崩潰。所以不知何故,我沒有正確設置AddressBookDelegate的地址。這是我反正...
它有它,對不起,我認爲這是顯而易見的。我已將它添加到問題中。因此,人員選取器代表位於App Delegate IS中的代碼。我在解決它時遇到了一些問題,並與之連接。請注意在問題底部添加的文字,以便澄清任何事情。 – Ric