Не удается создать / удалить группу адресной книги на устройстве iPad - PullRequest
0 голосов
/ 30 апреля 2018

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

Создание / удаление группы отлично работает на симуляторе (с iOS 11.3 и с iOS 9.3).

В обоих случаях настройки контактов по умолчанию установлены на iCloud в настройках iOS.

Я проверил настройки конфиденциальности в обоих случаях, разрешение на доступ к контактам устройства было установлено на YES

Следующий код не работает на iPad с iOS 9.3.5.

-(void) createNewGroup:(NSString*)groupName
{
    CFErrorRef error = NULL;
    ABAddressBookRef ab = ABAddressBookCreateWithOptions(NULL, &error);
    if (ab) {
        ABRecordRef newGroup = ABGroupCreate();
        ABRecordSetValue(newGroup, kABGroupNameProperty,(__bridge CFTypeRef)(groupName), nil);
        ABAddressBookAddRecord(ab, newGroup, &error);

        if (error) {
             DDLogDebug(@"cannot create group -%@",error);
        }else{
            ABAddressBookSave(ab, &error);
        }

        if (error) {
           DDLogDebug(@"cannot save group -%@",error);
        }
        //!!! important - save groupID for later use
        self.groupId = ABRecordGetRecordID(newGroup);  //-1 for iPad, and for other cases 2,3,4 ....
        DDLogDebug(@"createNewGroup : %i",self.groupId );

        CFRelease(newGroup);
        CFRelease(ab);
    }
}

и удалить группу:

Примечание: я не тестировал этот метод на iPad, так как нет группы, которую я хочу удалить, я протестирую это после того, как смогу создать группу на iPad. Этот метод сработал, как и ожидалось на симуляторе.

-(BOOL)deleteGroup:(NSString *)groupName{

    BOOL res;
    CFErrorRef error;
    ABAddressBookRef ab = ABAddressBookCreate();

    NSArray *groups = (__bridge NSArray *) ABAddressBookCopyArrayOfAllGroups(ab);

    for (id _group in groups)
    {
        NSString *currentGroupName = (__bridge NSString*) ABRecordCopyValue((__bridge ABRecordRef)(_group), kABGroupNameProperty);
        DDLogDebug(@"group name -%@",currentGroupName);
        if ([groupName isEqualToString:currentGroupName])
        {
            res = ABAddressBookRemoveRecord(ab, (__bridge ABRecordRef)(_group), &error);
            return res;
        }

    }

    return NO;
}

Я не получаю никакой ошибки, но я получаю groupID как -1 при попытке создать группу на iPad, и я проверяю, что группа вообще не создана.

...