1

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);

理由はありますか?もう一つ、アドレス帳を使用するための設定権限について他のアプリで見たのですが、それが解決策でしょうか?

4

1 に答える 1

1

これが iOS 6 の場合、アドレス帳にアクセスするには、ユーザーの許可を得る必要があります。

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

これによりプロンプトが表示され、ユーザーがアプリを承認できるようになります。

于 2012-10-16T18:02:11.313 に答える