相关疑难解决方法(0)

获取iOS上所有联系人的列表

我想获得iPhone的所有联系人列表.

我检查了Address Book参考,我可能错过了一些东西,但我没有看到它提供了获取联系人列表的方法.

abaddressbook ios4 ios

72
推荐指数
8
解决办法
9万
查看次数

当用户更改联系人访问权限时,应用程序在iOS 6中崩溃

我有一个使用地址簿的应用程序.在iOS 6中运行时,当用户执行需要通讯簿访问的操作时,它会运行此代码.

if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined)
{
    ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL);

    ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error)
    {
        if (granted)
        {
            showContactChooser();
        }
    });

    CFRelease(addressBookRef);
}
else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized)
{
    showContactChooser();
}
else
{
    showAccessDeniedAlert();
}
Run Code Online (Sandbox Code Playgroud)

这非常有效:我能够阅读联系人信息,当用户拒绝访问时,应用程序会做出相应的反应.

但是,如果用户:

  1. 允许在应用中访问联系人,
  2. 退出应用,
  3. 转到设置 - >隐私 - >联系人并禁用应用程序的联系人访问权限,
  4. 运行应用程序,
  5. 当应用程序在后台运行时进入设置并启用应用程序的联系人访问权限,

应用程序立即崩溃main(),没有异常信息或有意义的堆栈跟踪.我尝试打开"所有异常"和[NSException raise]断点,但这并没有给我任何更多信息.

即使应用程序在启动期间未运行上述代码,也可以重现崩溃.

这里发生了什么事?我应该订阅回调吗?

cocoa-touch abaddressbook ios ios6

46
推荐指数
1
解决办法
1万
查看次数

在iOS 7中获取联系人

此代码适用于iOS5/iOS6但不适用于iOS7.

CFErrorRef *error = NULL;
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);
    //ABAddressBookRef addressBook = ABAddressBookCreate();
    CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
    CFIndex numberOfPeople = ABAddressBookGetPersonCount(addressBook);

    for(int i = 0; i < numberOfPeople; i++) {

        ABRecordRef person = CFArrayGetValueAtIndex( allPeople, i );

        NSString *firstName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonFirstNameProperty));
        NSString *lastName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonLastNameProperty));
     //   NSLog(@"Name:%@ %@", firstName, lastName);

        ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
        NSString *phoneNumber;
        for (CFIndex i = 0; i < ABMultiValueGetCount(phoneNumbers); i++) {
            phoneNumber = (__bridge_transfer NSString *) ABMultiValueCopyValueAtIndex(phoneNumbers, …
Run Code Online (Sandbox Code Playgroud)

iphone ipad ios ios7

27
推荐指数
2
解决办法
3万
查看次数

Square的CardCase应用程序如何自动从地址簿中填充用户的详细信息?

Square的新名片盒iOS应用程序具有"创建帐户"功能.点击它,它会显示一个表格PREPOPULATED与用户在地址簿中的条目.

这怎么可能?谁知道?我认为这是不可能的,以这种方式获取用户的信息.这不是iOS 5.0的东西,afaict.

square abaddressbook ios

21
推荐指数
2
解决办法
2万
查看次数

在iOS 6中无法访问设备上的联系人源

这个代码在iOS 5.1上运行正常,也可以在iOS 6的iPhone模拟器中运行.它在运行iOS 6的iPhone 4上无声地失败.最终结果是我无法将人添加到Contacts应用程序中.以下代码片段都不起作用(每个日志跟随):

ABRecordRef defaultSource = ABAddressBookCopyDefaultSource(_addressBook);
NSLog(@"2 - defaultSource = %@", defaultSource);
Run Code Online (Sandbox Code Playgroud)

AB:无法编译查询语句(ABCCopyArrayOfAllInstancesOfClassInSourceMatchingProperties):SELECT ROWID,Name,ExternalIdentifier,Type,ConstraintsPath,ExternalModificationTag,ExternalSyncTag,AccountID,Enabled,SyncData,MeIdentifier,Capabilities FROM ABStore WHERE Enabled =?;

2012-09-24 11:00:36.731 QR vCard [193:907] 2 - defaultSource =(CPRecord:0x1f59fd50 ABStore)

当我尝试将一个人添加到地址簿时,我得到了这个(似乎是因为源是无效的,即使它看起来好像从上面可以):

2012-09-24 11:18:32.231 QR vCard [220:907] ABAddressBookAddRecord error =操作无法完成.(ABAddressBookErrorDomain错误1.)


我以为我可以获得所有的来源,然后选择一个,但以下都没有返回任何:

CFArrayRef allSources = ABAddressBookCopyArrayOfAllSources (_addressBook);
NSLog(@"2 - allSources = %@", allSources);
Run Code Online (Sandbox Code Playgroud)

AB:无法编译查询语句(ABCCopyArrayOfAllInstancesOfClassInSourceMatchingProperties):SELECT ROWID,Name,ExternalIdentifier,Type,ConstraintsPath,ExternalModificationTag,ExternalSyncTag,AccountID,Enabled,SyncData,MeIdentifier,Capabilities FROM ABStore WHERE Enabled =?;

2012-09-24 10:58:09.908 QR vCard [177:907] 2 - allSources =()

addressbook ios

14
推荐指数
2
解决办法
1万
查看次数

请求允许访问Contacts iOS的权限

我正在将所有本地地址簿联系人导入我的应用程序.目前,要求获得"允许访问联系人"权限的alertview在应用程序启动时完成.

如何更改它以便在应用程序的其他位置询问权限?点击按钮就像Instagram一样?

看这张图:

在此输入图像描述

permissions contacts addressbook ios

12
推荐指数
1
解决办法
1万
查看次数

iOS 9 - 获取的联系人返回空电话号码

知道为什么有些人CNContacts回来时电话号码是空的吗?

我不断得到这样的输出:

"phoneNumbers=(not fetched), emailAddresses=(not fetched),"
Run Code Online (Sandbox Code Playgroud)

例如,当我从模拟器的内置联系人应用程序中获取联系人时,我会得到混合结果: "John Appleseed" 确实返回了电话号码,但"Kate Bell"没有返回- 尽管她显然有电话号码。这很奇怪,因为我肯定CNContactPhoneNumbersKey在我的获取请求中使用。

这是我的代码:

let fetchKeys = [ CNContactEmailAddressesKey, CNContactPhoneNumbersKey, 
                  CNContactFormatter.descriptorForRequiredKeysForStyle(.FullName) ]
let contactFetchRequest = CNContactFetchRequest(keysToFetch: fetchKeys)

do { 
   try self.contactsStore.enumerateContactsWithFetchRequest(contactFetchRequest) {                     
   fetchedContact, stop in
         print("fetched Contact is: \n\(fetchedContact.description)")
   }
}
Run Code Online (Sandbox Code Playgroud)

正如我所提到的,输出显示有时获取的联系人会返回电话号码,有时则不会。电子邮件也是如此:有时会被退回,有时不会。

这种情况在模拟器中以及当我在 iPhone 上运行时都会发生。

知道这里会发生什么吗?

ios swift ios9 cncontact cncontactstore

5
推荐指数
1
解决办法
1153
查看次数

HOWTO设置AddressBookAccessRequest alertView的文本?

我知道在iOS 6中我们应该首先请求访问联系人,如下所示: 应用程序想要访问您的联系人

但现在,我想知道如何在警报视图中添加详细消息,只需在alert-title和两个按钮之间添加.我确实看到有些应用已经做到了.

我使用ABAddressBookCreateWithOptionsABAddressBookRequestAccessWithCompletion,但前一个选项保留为NULL,而后一个选项仅接受回调块.

我搜索了很多,比如另一个Q,iOS 6发行说明Apple Doc,但未能成功.

非常感谢您的帮助.:)

ios

3
推荐指数
1
解决办法
1616
查看次数

ABAddressBookSave上的随机崩溃

我遇到了解决随机崩溃的问题:有时会崩溃/有时不崩溃.根据EXC_BAD_ACCESS执行ABAddressBookSave时!,我应该采用多值参数来获取正确的值,

日期,地址,电子邮件,电话:所有都被视为multiValueRef.

代码供参考:

CFErrorRef error = NULL;
ABRecordRemoveValue (record,kABPersonFirstNameProperty,&error);
ABRecordRemoveValue(record, kABPersonLastNameProperty,&error);
ABRecordRemoveValue(record, kABPersonOrganizationProperty,&error);
ABRecordRemoveValue(record, kABPersonPrefixProperty,&error);
ABRecordRemoveValue(record, kABPersonSuffixProperty,&error);
ABRecordRemoveValue(record, kABPersonNicknameProperty,&error);
ABRecordRemoveValue(record, kABPersonMiddleNameProperty,&error);
ABRecordRemoveValue(record,kABPersonDepartmentProperty,&error);
ABRecordRemoveValue(record,kABPersonJobTitleProperty,&error);
ABRecordRemoveValue(record,kABPersonNoteProperty,&error);
ABRecordRemoveValue(record,kABPersonBirthdayProperty,&error);
ABRecordRemoveValue(record,kABPersonAddressProperty,&error);
ABRecordRemoveValue(record,kABPersonEmailProperty,&error);
ABRecordRemoveValue(record,kABPersonPhoneProperty,&error);
bool success = false;

string  m_strDisplayName = item->getDisplayName();
string m_strFirstName = item->getFirstName();
string m_strLastName = item->getLastName();
string m_strMiddleName = item->getMiddleName();
string m_strAddress = item->getAddress();
string m_strHomeAddr = item->getHomeAddress();
string m_strWorkAddress = item->getWorkAddress();
string m_strCompany = item->getCompany();
string m_strTitle = item->getTitle();
string m_strPhoto = item->getPhoto();
string m_strNotes = item->getNotes();
string m_strPrefix …
Run Code Online (Sandbox Code Playgroud)

iphone contacts addressbook abaddressbook ios

2
推荐指数
1
解决办法
561
查看次数

如何才能将地址​​簿权限弹出窗口显示在顶部?

我正在指导一个由7年级和8年级学生组成的团队,致力于开发一个小型应用程序,以大格式显示地址簿中的选项.您可以在callmeapp.org查看他们的一般项目.我们坚持如何提示用户获得权限,以便我们可以访问通讯录.基本上用户提示没有正确显示.仅供参考,我们已经了解了通过设置>常规>重置>重置位置和隐私来清除权限.

我们正在使用xCode 4.6并在iPhone MC918LL/A运行版本6.1.2上进行测试.

我们在appdelegate.m didfinishlaunchingwithoptions方法中使用DavidPhilipOster在此线程中的响应开始:如何在iOS 6中正确使用ABAddressBookCreateWithOptions方法?.我们做了一些编辑以清除我们得到的错误.

现在,应用程序启动到黑屏并在那里停留至少24秒,此时应用程序似乎关闭,显示下方的权限提示.接受将我们发送到桌面.当我们重新打开应用程序时,它就像许可已被清除一样工作.或者,如果我们点击主屏幕按钮(手机上的方形按钮)而屏幕为黑色,则会关闭以显示上述权限提示.permisison窗口应在很短的延迟后显示,然后在用户授权时将我们留在应用程序中.

我们陷入了一些NSLog点,看看发生了什么.我已将它们留在代码中,以防有所帮助.它将显示点1,2,5,然后等待.清除提示3,7和4后,即使手机显示桌面也输入.

任何帮助或提示将不胜感激.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSLog(@"Point 1");
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL,NULL);

    __block BOOL accessGranted = NO;

    if (ABAddressBookRequestAccessWithCompletion != NULL) { // we're on iOS 6
        NSLog(@"Point 2");
        dispatch_semaphore_t sema = dispatch_semaphore_create(0);

        ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
            NSLog(@"Point 3");
            accessGranted = granted;
            dispatch_semaphore_signal(sema);
            NSLog(@"Point 4");
        });
        NSLog(@"Point 5");

        dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
        dispatch_release(sema);
    } else { // we're on iOS 5 or older
        NSLog(@"Point 6");

        accessGranted …
Run Code Online (Sandbox Code Playgroud)

addressbook abaddressbook ios

1
推荐指数
1
解决办法
4616
查看次数