iOS AddressBook将多个人添加到组中

时间:2014-09-12 18:56:44

标签: ios addressbook abaddressbook

我正在尝试使用我的应用创建一项功能,以便在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];
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我无法解释它,但我做了一个小小的改动,应该更好地捕获一个错误,而不是似乎导致代码神奇地开始工作 - 这通常是代码为你在某处写了记忆。

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

  1. 在进入循环之前设置成功= YES
  2. 更改了||测试和&amp;&amp;在两个循环中测试
  3. 所有我改变了,但不知怎的,它刚开始工作......很奇怪......我正在测试/锤击这件事情,以防我看到事情......