2012-03-23 12 views
0

を呼び出すときに取得する:後で私はEXC_BAD_ACCESSは、私はアドレス帳の連絡先を取得するため、以下の方法持ってABAddressBookRemoveRecord

- (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); 
} 

を、次のビューでは、私が選択したレコード&を削除するオプションがあり、これは、それがどのように見えるかです以下のような:

-(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 & ABRecordIDを渡そうとしましたが、両方のケースで、私はABAddressBookRemoveRecordにEXC_BAD_ACCESSを持っていました。

答えて

1

問題は、私は参照からIDを持つグループからの参照を取得しようとしていたということでした& 。。私は

私のアプリはEXC_BAD_ACCESSを与えていたところだ後にnilを参照してレコードを検索しようとしている参照&としてnilを取得ので、代わりのた:

ABRecordRef person = ABAddressBookGetGroupWithRecordID(addressBook, recordID); 

があるはずです:

ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressBook, recordID); 
+0

両方のコード行は同じです –

+2

@ShreeshGarg何ですか?近くに見て! – tipycalFlow

+1

申し訳ありませんが私のミス –

2

ABAddressBookGetGroupWithRecordID(addressBook、recordID)がnull以外の値を返しましたか?

私は同じ問題を抱えていますが、問題はrecordIDの会話のどこかにあると思います。 試してみると

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

でもnullが返されます。 私はまだこれを解決する方法がわかりません。

UI:私はコメントでこれを追加したいが、私はまだ十分な担当者を持っていけない判明:(

+0

この行を変更してください。NSNumber * recordID = [NSNumber numberWithUnsignedInt:ABRecordGetRecordID(person)]; to NSString * recordID = [NSString stringWithFormat:@ "%d"、ABRecordGetRecordID(person)]];ここで、グループを初期化します。それは問題を解決するはずです。 – Hooloovoo

+0

より良い解決策:http://stackoverflow.com/questions/2138923/iphone-addressbook-getting-null-item-in-abaddressbookgetpersonwithrecordid – Hooloovoo

+0

私は私の記事を掲載する前にその解決策を読んで、私の問題を解決しませんでした。 – Kex

関連する問題