Ios 在iPad设备中创建/删除通讯簿组失败
我正试图通过创建一个组来管理我的应用程序的联系人 创建/删除组在模拟器(iOS 11.3和iOS 9.3)上运行良好 在这两种情况下,默认联系人设置都在iOS设置中设置为iCloud 我已经检查了这两种情况下的隐私设置,访问设备联系人的权限设置为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
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。我们正在进行到联系人框架的迁移,因为联系人框架不提供联系人创建日期