我正在尝试使用我的应用创建一项功能,以便在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];
}
}
}
答案 0 :(得分:0)
我无法解释它,但我做了一个小小的改动,应该更好地捕获一个错误,而不是似乎导致代码神奇地开始工作 - 这通常是代码为你在某处写了记忆。
无论如何,我做了以下工作并开始工作:
所有我改变了,但不知怎的,它刚开始工作......很奇怪......我正在测试/锤击这件事情,以防我看到事情......