iOS通讯簿将多人添加到组

iOS通讯簿将多人添加到组,ios,addressbook,abaddressbook,Ios,Addressbook,Abaddressbook,我正在尝试用我的应用程序创建一个功能,允许用户在iOS上轻松添加和/或从组中删除。如果我: 1一次添加一个人 2一次移动一个人 但是,如果我选择了多个人同时添加和/或删除,则只有第一个操作(如果有,请先添加;如果没有添加,请先删除)提交到通讯簿。这个方法可以通过任何一个单独的操作反复调用,它将成功。我无法确定为什么我不能让它在一次保存调用的上下文中保存多个添加/删除。应该指出的是,没有错误是给出并逐步通过用于确定成功的布尔值的代码表明一切工作都是完美的 我尝试了各种调整代码的组合,例如:创建本地

我正在尝试用我的应用程序创建一个功能,允许用户在iOS上轻松添加和/或从组中删除。如果我:

1一次添加一个人 2一次移动一个人

但是,如果我选择了多个人同时添加和/或删除,则只有第一个操作(如果有,请先添加;如果没有添加,请先删除)提交到通讯簿。这个方法可以通过任何一个单独的操作反复调用,它将成功。我无法确定为什么我不能让它在一次保存调用的上下文中保存多个添加/删除。应该指出的是,没有错误是给出并逐步通过用于确定成功的布尔值的代码表明一切工作都是完美的

我尝试了各种调整代码的组合,例如:创建本地通讯簿、检索groupRef、保存通讯簿,所有这些都在for循环中。我还调查了在保存地址簿后恢复地址簿的问题,但没有结果。想法还是经历

-(IBAction)save:(id)sender
{
    @synchronized(self)
    {
        CFErrorRef error = NULL;
        BOOL success = NO;
        BOOL successfulSave = NO;

        ABAddressBookRef localAddressBook = ABAddressBookCreateWithOptions(NULL, &error);
        group = ABAddressBookGetGroupWithRecordID(localAddressBook, groupID);

        for (CFIndex addItemCount = 0; addItemCount < [theAddList count]; ++addItemCount)
        {
            NSNumber *addID = [theAddList objectAtIndex:addItemCount];
            ABRecordRef thePersonID = ABAddressBookGetPersonWithRecordID(localAddressBook, [addID intValue]);
            success = success || ABGroupAddMember(group, thePersonID, &error);
        }

        for (CFIndex removeItemCount = 0; removeItemCount < [theRemoveList count]; ++removeItemCount)
        {
            NSNumber *removeID = [theRemoveList objectAtIndex:removeItemCount];
            ABRecordRef thePersonID = ABAddressBookGetPersonWithRecordID(localAddressBook, [removeID intValue]);
            success = success || ABGroupRemoveMember(group, thePersonID, &error);
        }

        if (success)
        {
            successfulSave = ABAddressBookSave(localAddressBook, &error);
        }

        if (!(successfulSave && success))
        {
            UIAlertView *addressBookUpdateAlert = [[UIAlertView alloc] initWithTitle:@"AddressBook Error" message:@"An update to your address book could not be processed at this time. Try again shortly." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
            // we can't update a GUI element from a background thread - appears sensitivity didn't appear until iOS 8
            [[NSOperationQueue mainQueue] addOperationWithBlock:
             ^{
                 [addressBookUpdateAlert show];
             }];
        }
        else
        {
            [[self navigationController] popViewControllerAnimated:YES];
        }
    }
}

我无法解释,但我做了一个小小的改变,它本应该能更好地捕获错误,相反,它似乎让代码神奇地开始工作——顺便说一句,这通常是代码在某个地方过度写入内存

无论如何,我做了以下工作,它开始工作:

在进入循环之前,设置success=YES 将两个循环中的| |测试更改为&&测试 我改变了一切,但不知怎么的,它开始工作了…奇怪…我要去测试/敲打这个东西,以防我看到东西