Ios 在iPad设备中创建/删除通讯簿组失败

Ios 在iPad设备中创建/删除通讯簿组失败,ios,objective-c,abaddressbook,Ios,Objective C,Abaddressbook,我正试图通过创建一个组来管理我的应用程序的联系人 创建/删除组在模拟器(iOS 11.3和iOS 9.3)上运行良好 在这两种情况下,默认联系人设置都在iOS设置中设置为iCloud 我已经检查了这两种情况下的隐私设置,访问设备联系人的权限设置为YES 以下代码在配备iOS 9.3.5的iPad上失败 -(void) createNewGroup:(NSString*)groupName { CFErrorRef error = NULL; ABAddressBookRef ab

我正试图通过创建一个组来管理我的应用程序的联系人

创建/删除组在模拟器(iOS 11.3和iOS 9.3)上运行良好

在这两种情况下,默认联系人设置都在iOS设置中设置为iCloud

我已经检查了这两种情况下的隐私设置,访问设备联系人的权限设置为
YES

以下代码在配备iOS 9.3.5的iPad上失败

-(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;
}

我没有得到任何错误,但当我尝试在iPad上创建组时,我得到的groupID为-1,我检查该组是否根本没有创建

你说隐私已经被设置为允许,但你是否仍在通过实际调用操作系统来获得授权?我怀疑你总是需要向操作系统请求权限(操作系统只会向用户请求一次)。不,我不是为了获得授权而打电话。我单独调用这段代码来测试它。整个地址簿框架基本上已被弃用。你应该使用
CNContactStore
我完全同意@Paulw11。我们正在进行到联系人框架的迁移,因为联系人框架不提供联系人创建日期