我已将其添加ABPeoplePickerNavigationController
到我的第一个视图控制器中.我希望当我选择一个联系人时显示要在其他视图控制器中显示的信息,但我正在尝试使用我的代码,这在我点击联系人时不会显示.这只会打开联系人到本机应用程序ABPeoplePickerNavigationController
.
var people = ABPeoplePickerNavigationController()
var addressBook: ABAddressBookRef?
func extractABAddressBookRef(abRef: Unmanaged<ABAddressBookRef>!) -> ABAddressBookRef? {
if let ab = abRef {
self.view.addSubview(people.view)
return Unmanaged<NSObject>.fromOpaque(ab.toOpaque()).takeUnretainedValue()
}
return nil
}
Run Code Online (Sandbox Code Playgroud)
我试过这个功能
func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!,didSelectPerson person: ABRecordRef!) {
var unmanagedEmails = ABRecordCopyValue(people, kABPersonEmailProperty)
let emailObj: ABMultiValueRef = Unmanaged.fromOpaque(unmanagedEmails.toOpaque()).takeUnretainedValue() as NSObject as ABMultiValueRef
var index = 0 as CFIndex
var unmanagedEmail = ABMultiValueCopyValueAtIndex(emailObj, index)
var emailAddress:String = Unmanaged.fromOpaque(unmanagedEmail.toOpaque()).takeUnretainedValue() as NSObject as String
println(emailAddress)
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我的发现
我正在设计一个与我的后端同步联系的逻辑.我经历了一些在IOS中做同样事情的应用程序.我将以WhatsApp为例,我发现当我更新Native Addressbook中的任何联系人时,它反映了对Whatsapp的更改.
我的顾虑
我只是想知道它是如何以更快的方式同步的.即使是新的联系人也会与其远程服务器同步并在联系时显示,并且如果该号码已注册,则能够启动Whatsapp聊天.
查询摘要
所以,简而言之,我的疑问是,
我知道有以下的东西,
ABAddressBookGetPersonCount
ABAddressBookGetPersonWithRecordID
ABAddressBookCopyArrayOfAllPeople
Run Code Online (Sandbox Code Playgroud)
使用ABAddressBookGetPersonCount
我可以知道是否有任何新的联系人,但仍然如何能够知道其记录ID,而无需使用迭代每个联系人ABAddressBookCopyArrayOfAllPeople
所以我只想问一下获得更新列表的方法.
我有一个问题似乎无法解决,即使我已经使用了我在谷歌和这里找到的资源.我刚开始接受Swift教学以及一个月前如何使用Xcode,因此,我很新,我遇到的问题可能对其他人来说非常简单.
我要做的是添加并保存新的联系人到地址簿.我可以从应用程序到联系人应用程序没有问题,它只是我无法保存新的联系信息.
import AddressBookUI
import AddressBook
class ViewController: UIViewController {
@IBOutlet weak var contactLink: UIButton!
@IBAction func contactLink(sender: AnyObject) {
var viewController: ABNewPersonViewController = ABNewPersonViewController()
self.presentViewController(viewController, animated: true, completion: nil)
}
}
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的与我的问题有关的代码.任何帮助将不胜感激.
我正在研究一个现有的目标c项目,在阅读iOS的地址簿UI框架参考时,发现以下类已在iOS 9中弃用.(ABUnknownPersonViewController
,ABPersonViewController
,ABPeoplePickerNavigationController
,ABNewPersonViewController
)什么是更换了这一点.?在哪里我可以找到一些相关的文件.任何帮助赞赏.提前致谢 .
我有一个子类ABPeoplePickerNavigationController
来处理在我的应用程序中选择联系电话号码.iOS 7及更低版本的一切都很棒.
但是,在iOS 8上,我ABPeoplePickerNavigationControllerDelegate
在选择电话号码时不会受到影响.相反,它只是拨打那个电话号码.
我注意到我在iOS 7中使用的用于处理联系人选择的peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier:
方法在iOS 8中已弃用.此方法已替换为peoplePickerNavigationController:didSelectPerson:property:identifier:
.
我知道我的委托已设置,因为我成功收到peoplePickerNavigationControllerDidCancel:
方法回调.
还有其他人遇到过这个问题吗?
这是我的ABPeoplePickerNavigationController
子类的代码片段:
- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier {
[self peoplePickerNavigationController:peoplePicker shouldContinueAfterSelectingPerson:person property:property identifier:identifier];
}
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier {
...do stuff...
return NO;
}
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person {
return YES;
}
- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker {
[self dismissViewControllerAnimated:self.shouldAnimateDismiss completion:NULL];
}
Run Code Online (Sandbox Code Playgroud) 当地址簿界面隐藏之前出现时,是否可以一次选择多个联系人?或者每次出现地址簿界面时,它应该只选择一个联系人吗?
对于存储在iPhone地址簿中的联系人,我想获取所有带有差异标签的电话号码,如"iPhone","家庭电话","手机号码","其他号码"等.
我怎么得到它?
请帮忙.
提前致谢.
我正在尝试:这是崩溃
ABAddressBookRef ab=ABAddressBookCreate();
CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(ab);
NSMutableArray *allNumbers = [[NSMutableArray alloc] initWithCapacity:CFArrayGetCount(people)];
for (CFIndex i = 0; i < CFArrayGetCount(people); i++) {
ABRecordRef person = CFArrayGetValueAtIndex(people, i);
ABMultiValueRef numbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
for (CFIndex j=0; j < ABMultiValueGetCount(numbers); j++) {
CFStringRef locLabel = ABMultiValueCopyLabelAtIndex(numbers, i);
NSString *phoneLabel =(NSString*) ABAddressBookCopyLocalizedLabel(locLabel);
CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(numbers, j);
CFStringRef locLabel1 = ABMultiValueCopyLabelAtIndex(numbers, j);
NSString *phoneLabel1 =(NSString*) ABAddressBookCopyLocalizedLabel(locLabel);
NSLog(@" ####### phone no -> %@ , phone label -> %@ #######)", …
Run Code Online (Sandbox Code Playgroud) ios ×6
objective-c ×4
addressbook ×2
cocoa-touch ×2
iphone ×2
swift ×2
ios7 ×1
ios8 ×1
peoplepicker ×1
whatsapp ×1
xcode ×1