ナビゲーション コントローラーにビュー コントローラーが埋め込まれています。ボタンとテーブルビューがあります。このView Controllerのテーブルビューにロードするには、電話からの連絡先が必要ですが、連絡先を表示する新しいナビゲーションコントローラーが開かれます。.m ファイルのコードは次のとおりです。
- (IBAction)showContacts:(id)sender
{
ABPeoplePickerNavigationController *picker =
[[ABPeoplePickerNavigationController alloc] init];
picker.peoplePickerDelegate = self;
// picker.modalPresentationStyle = UIModalPresentationCurrentContext;
//picker.modalInPopover = YES;
// [self.navigationController presentModalViewController:picker animated:YES];
[self presentModalViewController:picker animated:YES];
}
- (void)peoplePickerNavigationControllerDidCancel:
(ABPeoplePickerNavigationController *)peoplePicker
{
[self dismissModalViewControllerAnimated:YES];
}
- (BOOL)peoplePickerNavigationController:
(ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person {
// [self displayPerson:person];
[self dismissModalViewControllerAnimated:YES];
return NO;
}
- (BOOL)peoplePickerNavigationController:
(ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property
identifier:(ABMultiValueIdentifier)identifier
{
return NO;
}
これはかなり標準的なコードだと思います。別のコントローラーではなく、ボタンを持つView Controllerのテーブルビューに連絡先を表示するにはどうすればよいですか?
さて、私はこれをやった:
- (IBAction)syncContacts:(id)sender
{
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
for (int i = 0; i < ABAddressBookGetPersonCount(addressBook); i++) {
ABRecordRef ref = CFArrayGetValueAtIndex(allPeople, i);
NSString *contact = (NSString *)CFBridgingRelease(ABRecordCopyCompositeName(ref));
NSLog( @"%@", contact);
phoneContacts[i] = contact;
}
NSLog(@"%@",phoneContacts);
}
メソッドの名前を syncContacts に変更しました (便宜上)。NSLog(@"%@",contact) が実行されると、個々の連絡先が取得され、ログに表示されます。しかし、連絡先を phoneContacts 配列 (変更可能) にコピーしているときは、コピーしていません。addObject、insertObject:atIndex:、replaceObjectAtIndex:withObject: などを試しましたが、それでも phoneContacts 配列は null のままです。didViewLoad() で初期化されています。phoneContacts 配列には何も格納されていないため、表ビューも phoneContacts 配列を使用しているため、データが取り込まれていません。