Tag: abaddressbook

如何从ABPeoplePicker获取用户select的电子邮件地址?

在这里的其他人Stackoverflow发布了一种方式来获取用户从联系人列表中select的电话号码。 可以做电子邮件地址,如果是的话,我该怎么做? 这里是代码: – (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier { if (property == kABPersonPhoneProperty) { ABMultiValueRef multiPhones = ABRecordCopyValue(person, kABPersonPhoneProperty); for(CFIndex i = 0; i < ABMultiValueGetCount(multiPhones); i++) { if(identifier == ABMultiValueGetIdentifierAtIndex (multiPhones, i)) { CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(multiPhones, i); CFRelease(multiPhones); NSString *phoneNumber = (__bridge NSString *) phoneNumberRef; CFRelease(phoneNumberRef); _contactNumber.text = [NSString stringWithFormat:@"%@", phoneNumber]; } […]

ABRecordCopyValue返回0?

我想要做的是得到所有的联系人,并依靠如果该联系人有SocialProfileProperty或没有,得到所有这些SocialProfileProperty的联系人后,我会做出简单的过滤,以了解它是否是Facebook,Twitter的.. 在我发布这个问题之前,我整天都试图find这个问题的任何解决scheme? 但它是允许返回0? ABAddressBookRef addressBook; CFErrorRef *erer = NULL; addressBook = ABAddressBookCreateWithOptions(NULL, erer); CFArrayRef _allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook); CFIndex _nPeople = ABAddressBookGetPersonCount(addressBook); NSMutableArray *socialArray = [[NSMutableArray alloc] init]; ABMultiValueRef socialProfiles; for (int i=0;i<_nPeople; i++) { ABRecordRef _person=CFArrayGetValueAtIndex( _allPeople,i); NSNumber *recordId = [NSNumber numberWithInteger:ABRecordGetRecordID(_person)]; NSLog(@"%@",recordId); socialProfiles = ABRecordCopyValue(_person, kABPersonSocialProfileProperty); if (ABMultiValueGetCount(socialProfiles)>0) { [socialArray addObject:(__bridge id)(socialProfiles)]; } } […]

访问核心数据模型/联系人数据库的间歇性错误

我在我的iOS应用程序中出现错误。 令人沮丧的是,这是一个间歇性的错误 – 我正在执行的任务连续工作5或6次,然后意外崩溃。 错误日志build议打开一个sqlite数据库的错误 – 大概是我的应用程序的核心数据模型。 但是,Xcode显示发生错误的行正在访问Apple联系人数据库。 所以我不清楚发生了什么事。 错误日志如下。 任何人都可以解释下面的输出,并阐明这一点? warning: Could not compile statement PRAGMA journal_mode = wal;: unable to open database file error 14 creating properties table: unable to open database file warning: Could not compile statement SELECT value FROM _SqliteDatabaseProperties WHERE key = ?;: unable to open database file warning: Could […]

获取断点检索地址簿数据

我正在检索phoneNumbers ,我正在得到一个断点。 我花了几个小时试图解决它,但仍然没有运气。 -(void)textMessage{ ABAddressBookRef addressBook = ABAddressBookCreate(); NSMutableArray *array =[[NSMutableArray alloc]init]; NSMutableArray *temp; NSMutableArray *temp2 = [[NSMutableArray alloc]init]; for(int i =0;i<[savedPeople count];i++){ NSString *temp = (NSString*) ABAddressBookCopyPeopleWithName(addressBook, (CFStringRef)[savedPeople objectAtIndex:i]); NSLog(@"%@",temp); [temp2 addObject:temp]; ABRecordRef thisPerson = (ABRecordRef)[temp2 objectAtIndex:i]; ABMultiValueRef phoneProperty = ABRecordCopyValue(thisPerson, kABPersonPhoneProperty); NSLog(@"%@",phoneProperty); } array = temp2; NSLog(@"%@",array); CFRelease(addressBook); } ![1] http://min.us/mQOzL3w5V 有人知道这有什么问题吗?

如何创buildvCard / vcf文件以在共享表中使用?

我是新来的迅速和我发现的方法已被弃用关于我的问题。 我正在构build一个目录应用程序,我从API中获取联系人数据,而不是从手机的地址簿中获取联系人数据。 在iOS中,如果您访问您的通讯录,则可以select一个联系人,然后select“共享联系人”,以打开分享表。 我想在我的应用程序中确切的function。 我想我已经得到了股票表,这是我的代码: @IBAction func actShare(sender: AnyObject) { let activityViewController = UIActivityViewController(activityItems: ["text" as NSString], applicationActivities: nil) presentViewController(activityViewController, animated: true, completion: {}) } 我想把"text" as NSString改成vCard,就像iOS从地址簿中分享的对象一样,对吗? 假设我是正确的,我想从我自己的应用程序的联系人对象创build一个电子名片,以分享到适当的应用程序(电子邮件,短信等)。 我怎样才能在Swift中实现? 如果我错了,请纠正我,告诉我我需要做什么。 谢谢。 编辑:好的,这是我的变化。 @IBAction func actShare(sender: AnyObject) { do { var contactData = NSData() try contactData = CNContactVCardSerialization.dataWithContacts([createContact()]) let activityViewController = UIActivityViewController(activityItems: [contactData as NSData], […]

ABAddressBookCopyArrayOfAllPeople和ABAddressBookGetPersonCount返回不同的大小

由于ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering()与ABAddressBookGetPersonCount()的大小不同,我有一个偶尔崩溃的应用程序。 代码的shell如下所示。 通常nPeople与数组大小相同。 但是,在一个用户的iPhone上(或者至less一个用户所报告的),nPeople几乎是两倍大。 我可以通过使用数组大小​​而不是ABAddressBookGetPersonCount()来停止崩溃。 但是,我不确定这是否意味着我没有访问iPhone中的所有联系人。 有没有人遇到过这个问题? 为什么数字会不一样? 我想知道是否这是联系人被存储在群组(我不知道有团体 – 只是一个想法)。 另外,从用户的电子邮件地址,我怀疑他们使用MobileMe。 我想知道,如果与MobileMe同步将创build具有不同recordId的重复项,但不删除现有的联系人,至less不会达到ABAddressBookGetPersonCount()去。 编辑:我已经看了这一些更多,并有一个相当好的主意,在问题的原因。 正如我想要一个sorting的联系人数组,我使用ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering()。 这需要一个地址簿来源 – 我使用了默认的来源。 我相信可以有各种各样的来源 – 本地来源以及诸如Exchange和MobileMe等其他来源。 因此,我的数组最终将只有本地联系人,而ABAddressBookGetPersonCount()返回的数字将包含所有的来源 – 因此我的崩溃。 因此,我认为最好是在我的应用程序中使用本地数据,并使用由ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering而不是ABAddressBookGetPersonCount返回的数组大小。 CFArrayRef allPeople = InSourceWithSortOrdering(addressBook, source, kABPersonSortByLastName); CFIndex nPeople = ABAddressBookGetPersonCount(addressBook); for (int i = 0; i < nPeople; i++) { ABRecordRef ref = CFArrayGetValueAtIndex(allPeople, i); }

在iOS 7.0模拟器上以编程方式授予对NAB的访问权限

是否有可能以编程方式授予在iOS 7.0 Simulator上的原生地址簿(NAB)访问权限? 我正在写xctestunit testing,需要写访问 NAB。 unit testing在iOS 7.0模拟器上运行,是持续集成过程的一部分,不涉及任何用户交互。 目前,除非用户通过“TestApp”明确授予访问权限,否则将拒绝访问NAB。

如何请求权限再次访问iphone联系人地址簿?

我要求使用下面的代码访问我的联系人的权限。 ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL); if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) { ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) { } else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) { } else { } 到目前为止一切正常,但是,如果我删除了应用程序,再次debugging应用程序不会再问我的权限。 在此之前,如果我接受或拒绝,我可以在隐私联系人和我的应用程序的名称中看到它是否打开或closures。 我想要应用程序问我的权限popup。 我应该怎么做重新启动设备并重新安装应用程序。 无论如何清除某种caching?

用ABPersonCopyImageData获取iOS联系人图像

我试图阅读我的iOS通讯录的联系人图片,但是我遇到了一些麻烦。 我有一个方法,读取ABAddressBookRef的联系人的信息,并把它放在一个结构。 func readContacts(addressBook: ABAddressBookRef){ let allPeople = ABAddressBookCopyArrayOfAllPeople(addressBookRef).takeRetainedValue() as NSArray var numeros : [Numeros] = [] //lendo todos os contatos for person: ABRecordRef in allPeople{ let firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty).takeRetainedValue() as! String let lastName = ABRecordCopyValue(person, kABPersonLastNameProperty).takeRetainedValue() as! String let phones : ABMultiValueRef = ABRecordCopyValue(person, kABPersonPhoneProperty).takeUnretainedValue() as ABMultiValueRef let data = ABPersonCopyImageData(person).takeRetainedValue() as NSData […]

检测从ABAddressBookRegisterExternalChangeCallback中更改的内容

我正在使用ABAddressBookRegisterExternalChangeCallback获取用户的AddressbookBook中的外部更改。 我正在使用下面的代码注册callback: ABAddressBookRef ntificationaddressbook = ABAddressBookCreate(); ABAddressBookRegisterExternalChangeCallback(ntificationaddressbook, MyAddressBookExternalChangeCallback, self); 当这个callback被调用时,MyAddressBookExternalChangeCallback被调用成功 void MyAddressBookExternalChangeCallback (ABAddressBookRef ntificationaddressbook,CFDictionaryRef info,void *context) { NSLog(@"Changed Detected……"); } 我有以下问题: 如何检测哪些联系人发生了变化,以及在该联系人上执行了哪些操作(添加,更新,删除) 。 我需要获取该联系人的recordID。 可能吗 ? 不幸的是,如果不可能,那么像viber,tango,watsapp这样的应用程序是如何获取变化信息的呢? 我得到只有当应用程序在后台如果应用程序被终止时调用的callback方法是否有任何方法来获取更改通知。 请帮忙。 提前致谢。