Добавить группу людей в ABAddressBookRef, группа добавлена ​​нормально, но человек не добавил в группу? - PullRequest
2 голосов
/ 23 сентября 2010

У меня есть несколько строк кода Objective C, таких как:

ABAddressBookRef addressBook;
CFErrorRef error = NULL;
addressBook = ABAddressBookCreate();
ABRecordRef group = ABGroupCreate();
ABRecordSetValue(group, kABGroupNameProperty,@"My Group", &error);

ABRecordRef person = ABPersonCreate();
ABRecordSetValue(person,kABPersonFirstNameProperty,@"Huy 1111111",&error);
ABRecordSetValue(person,kABPersonLastNameProperty,@"AseDra",&error);
ABGroupAddMember(group, person, &error);

ABAddressBookAddRecord(addressBook, group, &error);

ABAddressBookSave(addressBook,&error);

Все работает нормально, без ошибок, группа добавлена ​​в адресную книгу симулятора, но человек не добавлен в адресную книгу Simunator.Кто-нибудь может сказать мне, где я не прав?

Ответы [ 2 ]

5 голосов
/ 24 сентября 2010

Согласно Руководству по программированию адресной книги для iOS (ссылка ниже), запись о человеке должна существовать в адресной книге, прежде чем вы сможете добавить их в группу.

«Прежде чем запись о человеке может быть добавлена ​​в группу, она должна быть уже сохранена в базе данных адресной книги.»

http://developer.apple.com/library/ios/#documentation/ContactData/Conceptual/AddressBookProgrammingGuideforiPhone/500-DirectInteraction/DirectInteraction.html%23//apple_ref/doc/uid/TP40007744-CH6-SW4

Так, может быть, это будет работать

ABAddressBookRef addressBook;
CFErrorRef error = NULL;
addressBook = ABAddressBookCreate();

ABRecordRef person = ABPersonCreate();
ABRecordSetValue(person,kABPersonFirstNameProperty,@"Huy 1111111",&error);
ABRecordSetValue(person,kABPersonLastNameProperty,@"AseDra",&error);

// add the person record
ABAddressBookAddRecord(addressBook, person, &error);

ABRecordRef group = ABGroupCreate();
ABRecordSetValue(group, kABGroupNameProperty,@"My Group", &error);
ABGroupAddMember(group, person, &error);
ABAddressBookAddRecord(addressBook, group, &error);

ABAddressBookSave(addressBook,&error);
0 голосов
/ 14 августа 2015

Я прочитал ответы, в которых нужно сначала сохранить человека в адресную книгу, затем создать группу, затем добавить человека в группу, а затем снова сохранить.

Это не сработало для меня.

В конечном итоге у меня сработало следующее:

Сохраните контакт в адресной книге, сохраните группу в адресной книге, добавьте контакт в группу, а затем сохраните.Очень раздражает, но рад, что это работает, и надеюсь, что это работает для вас.

    ABAddressBookRef addressBook;
    bool wantToSaveChanges = YES;
    bool didSave;
    CFErrorRef error = NULL;

    addressBook = ABAddressBookCreateWithOptions(NULL, &error);

    // If you get some error when trying to add a contact, make sure it's not a permission issue

//    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
//        
//    });

    // create person

    ABRecordRef aRecord = ABPersonCreate();
    CFErrorRef anError = NULL;
    bool didSet;

    didSet = ABRecordSetValue(aRecord, kABPersonFirstNameProperty, CFSTR("Lily"), &anError);
    if (!didSet) { NSLog(@"Error: %@", anError); }

    didSet = ABRecordSetValue(aRecord, kABPersonLastNameProperty, CFSTR("Bell"), &anError);
    if (!didSet) { NSLog(@"Error: %@", anError); }

    bool didAdd;

    didAdd = ABAddressBookAddRecord(addressBook, aRecord, &anError);
    if (!didAdd) { NSLog(@"Error: Couldn't add record, %@", anError); };

    // we've added the person to the address book at this point
    // now try creating a group, and adding that person to the group (failed to add, error is NULL, for whatever reason)

    // if that fails, we might need to save the added contact, then add them to the group, then save (FAILED)
    // if the above fails, save the added contact, save the group, add the contact to group, then save (PASSED)
    // if the above fails, god help us

    // saving the added person first before adding them to the group
    didSave = ABAddressBookSave(addressBook, &error);
    if (!didSave) { NSLog(@"Error: %@", error); }


    ABRecordRef group = ABGroupCreate(); // create the group
    didSet = ABRecordSetValue(group, kABGroupNameProperty, @"NYC", &anError);
    if (!didSet) { NSLog(@"Error: Couldn't set group, %@", anError); }

    didAdd = ABAddressBookAddRecord(addressBook, group, &anError);
    if (!didAdd) { NSLog(@"Error: Couldn't add group, %@", anError); }


    // save the group now
    didSave = ABAddressBookSave(addressBook, &error);
    if (!didSave) { NSLog(@"Error: %@", error); }

    // adding person to group
    didAdd = ABGroupAddMember(group, aRecord, &anError);
    if (!didAdd) { NSLog(@"Error: Couldn't add contact to group, %@", anError); }

    // final save
    didSave = ABAddressBookSave(addressBook, &error);
    if (!didSave) { NSLog(@"Error: %@", error); }

    CFRelease(addressBook);
    CFRelease(aRecord);
    CFRelease(firstName);
    CFRelease(lastName);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...