gpt4 book ai didi

objective-c - 调用 ABAddressBookRemoveRecord 时我得到 EXC_BAD_ACCESS

转载 作者:行者123 更新时间:2023-11-28 20:37:34 24 4
gpt4 key购买 nike

我有以下获取地址簿联系人的方法:

- (void) scanAddressBook
{

NSUInteger i;
NSUInteger k;

ABAddressBookRef addressBook = ABAddressBookCreate();
NSArray *people = (__bridge_transfer NSArray *) ABAddressBookCopyArrayOfAllPeople(addressBook);

if ( people==nil )
{
NSLog(@"NO ADDRESS BOOK ENTRIES TO SCAN");
CFRelease(addressBook);
return;
}

for ( i=0; i<[people count]; i++ )
{
ABRecordRef person = (__bridge ABRecordRef)[people objectAtIndex:i];
NSNumber *recordID = [NSNumber numberWithUnsignedInt:ABRecordGetRecordID(person)];

ABMutableMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
NSString *name = [NSString stringWithFormat:@"%@ %@",
(__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty),
(__bridge_transfer NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty)];



CFIndex phoneNumberCount = ABMultiValueGetCount( phoneNumbers );
NSMutableArray *arrPhoneNumbers = [[NSMutableArray alloc] initWithCapacity:phoneNumberCount];

for ( k=0; k<phoneNumberCount; k++ )
{
CFStringRef phoneNumberLabel = ABMultiValueCopyLabelAtIndex( phoneNumbers, k );
NSString *phoneNumberValue = (__bridge_transfer NSString *)ABMultiValueCopyValueAtIndex( phoneNumbers, k );
CFStringRef phoneNumberLocalizedLabel = ABAddressBookCopyLocalizedLabel( phoneNumberLabel );


[arrPhoneNumbers addObject:phoneNumberValue];

CFRelease(phoneNumberLocalizedLabel);
CFRelease(phoneNumberLabel);
}

NSMutableDictionary *dictPerson = [[NSMutableDictionary alloc] init];
[dictPerson setObject:name forKey:@"contactName"];
[dictPerson setObject:arrPhoneNumbers forKey:@"phoneNumbers"];
[dictPerson setObject:recordID forKey:@"recordID"];

[arrABFriends addObject:dictPerson];
}

CFRelease(addressBook);
}

稍后,在下一个 View 中,我可以选择删除所选记录 & 这是它的样子:

-(IBAction) removeContactFromAB
{
ABAddressBookRef addressBook;
CFErrorRef error = NULL;
addressBook = ABAddressBookCreate(); //
CFRetain(addressBook);
ABRecordID recordID = (ABRecordID)[[personToDump objectForKey:@"recordID"] integerValue];
NSLog(@"recordID: %d", recordID);
// ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressBook,(ABRecordID)recordID);
ABRecordRef person = ABAddressBookGetGroupWithRecordID(addressBook, recordID);
//fullName.text = (NSString *)ABRecordCopyCompositeName((ABRecordRef)person);

ABAddressBookRemoveRecord( addressBook, person, &error );

if(error !=NULL)
{
UIAlertView *alert =[[UIAlertView alloc] initWithTitle:@"error" message:@"deleting" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"OK",nil];
[alert show];
}

ABAddressBookSave(addressBook, &error);
NSLog(@"ERROR: %@", &error);
CFRelease(addressBook);

}

我试图将 ABRecordRef 和 A​​BRecordID 传递给下一个 View ,但在这两种情况下,我在 ABAddressBookRemoveRecord(addressBook, person, &error) 上都有 EXC_BAD_ACCESS。

最佳答案

您的 ABAddressBookGetGroupWithRecordID(addressBook, recordID) 是否返回了 null 以外的内容?

我有同样的问题,我认为问题出在 recordID 的对话周围。如果你尝试

NSNumber *recordID=[NSNumber numberWithUnsignedInt:ABRecordGetRecordID(person)];
ABRecordID recordID2 =(ABRecordID) recordID2;
ABAddressBookGetGroupWithRecordID(addressBook, recordID2)

它也将返回 null。我还不确定如何解决这个问题。

ui.: 我想在评论中添加这个,但结果我还没有足够的代表:(

关于objective-c - 调用 ABAddressBookRemoveRecord 时我得到 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9844210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com