【问题标题】:can't save contact on device using address book - xcode无法使用地址簿在设备上保存联系人 - xcode
【发布时间】:2012-10-17 02:02:11
【问题描述】:

我找到了将 vcard 保存到设备的代码。 此代码在模拟器上运行完美,但在设备上尝试代码时,我看不到新联系人。 代码是:

NSString *vCardString = @"BEGIN:VCARD\nVERSION:2.1\nN:Standard11.3,Joe;\nADR:PO Box 555,Suite 55,5555 Any Street,San Diego,CA,92111,USA;;\nEND:VCARD";

    CFDataRef vCardData = (CFDataRef)CFBridgingRetain([vCardString dataUsingEncoding:NSUTF8StringEncoding]);  ABAddressBookRef book = ABAddressBookCreate();
    ABRecordRef defaultSource = ABAddressBookCopyDefaultSource(book);
    CFArrayRef vCardPeople = ABPersonCreatePeopleInSourceWithVCardRepresentation(defaultSource, vCardData);
    CFRelease(vCardData);
    for (CFIndex index = 0; index < CFArrayGetCount(vCardPeople); index++) {
        ABRecordRef person = CFArrayGetValueAtIndex(vCardPeople, index);
        ABAddressBookAddRecord(book, person, NULL);
        //CFRelease(person);
    }
    CFRelease(vCardPeople);
    CFRelease(defaultSource);
    ABAddressBookSave(book, NULL);
    CFRelease(book);

知道为什么吗? 另一件事,是我在其他应用程序中看到设置使用通讯录的权限,也许这就是解决方案?

【问题讨论】:

    标签: xcode addressbook abaddressbook abperson


    【解决方案1】:

    如果这是在 iOS 6 上,您需要征得用户的许可才能访问通讯簿。

    ABAddressBookRef ref = ABAddressBookCreate();
    ABAddressBookRequestAccessWithCompletion(ref, ^(bool granted, CFErrorRef error) {
       if(granted) {
          //Use the address book
       }
    });
    

    这将弹出提示,以便用户批准您的应用。

    【讨论】:

      猜你喜欢
      • 2017-02-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多