Max*_*Max 2 iphone abaddressbook ios5
我正在尝试从我创建的iPhone中删除联系人.我试图找到一个删除联系人的好工作示例,但没有找到一个.添加联系人似乎很容易,但删除一个似乎很难.以下代码不起作用,但似乎是合理的:
ABAddressBookRef addressBook = ABAddressBookCreate();
ABRecordRef delete = ABPersonCreate();
ABRecordSetValue(delete, kABPersonFirstNameProperty, @"Max", nil);
ABRecordSetValue(delete, kABPersonLastNameProperty, @"Mustermann", nil);
ABAddressBookRemoveRecord(addressBook, delete, &error);
ABAddressBookSave(addressBook, &error);
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助我.
在此先感谢您的帮助.
马克斯
问题是你正在创建一个ABRecord不在地址簿中的内容.你要做的是搜索一系列的ABRedords ABAddressBook.我写了如何为你做这个:
CFErrorRef error = nil;
ABAddressBookRef addressBook = ABAddressBookCreate();
__block ABRecordRef toDelete = ABPersonCreate();
ABRecordSetValue(toDelete, kABPersonFirstNameProperty, @"Max", nil);
ABRecordSetValue(toDelete, kABPersonLastNameProperty, @"Mustermann", nil);
// Gets the array of everybody in the address book
NSArray *peopleArray = (__bridge NSArray *) ABAddressBookCopyArrayOfAllPeople(addressBook);
// Creates a test predicate to see if the ABRecord has the same name as toDelete
BOOL (^predicate)(id obj, NSUInteger idx, BOOL *stop) = ^(id obj, NSUInteger idx, BOOL *stop) {
ABRecordRef person = (__bridge ABRecordRef)obj;
CFComparisonResult result = ABPersonComparePeopleByName(person, delete, kABPersonSortByLastName);
bool pass = (result == kCFCompareEqualTo);
if (pass) {
toDelete = person;
}
return (BOOL) pass;
};
int idx = [peopleArray indexOfObjectPassingTest:predicate];
bool removed = ABAddressBookRemoveRecord(addressBook, toDelete, &error);
bool saved = ABAddressBookSave(addressBook, &error);
Run Code Online (Sandbox Code Playgroud)
您可以ABRecord通过更改块代码来更改要比较实例的方式.它现在所做的只是比较联系人的姓名.
使用此代码的一个警告是,它只会删除ABRecord名称与其匹配delete的s的一个实例.
| 归档时间: |
|
| 查看次数: |
2462 次 |
| 最近记录: |