2011-03-02 181 views
0

我想從iPhone的電話簿中獲取所有電話號碼。但是當我嘗試使用kABPersonPhoneProperty獲取數字時,我的應用崩潰了。代碼片段在這裏使用kABPersinPhoneProperty時應用程序崩潰

ABAddressBookRef addressBook = ABAddressBookCreate(); 
NSMutableArray *allPeople = (NSMutableArray*)ABAddressBookCopyArrayOfAllPeople(addressBook); 
int nPeople = ABAddressBookGetPersonCount(addressBook); 
CFRelease(addressBook); 

for(int i=0; i < nPeople; i++){ 

    ABRecordRef person = [allPeople objectAtIndex:i]; 
    NSString *name = @""; 
    CFTypeRef fName = ABRecordCopyValue(person, kABPersonFirstNameProperty); 
    CFTypeRef lName = ABRecordCopyValue(person, kABPersonLastNameProperty); 
    ABMultiValueRef multi = ABRecordCopyValue(person , kABPersonPhoneProperty); 
    NSString *number = (NSString *)ABMultiValueCopyValueAtIndex(multi, 0); 

    if ([number length] > 0) { 
     if(fName != NULL) 
     { 
      if (lName != NULL) { 
       name = [[NSString stringWithFormat:@"%@", fName] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 
      } 
      else { 
       name = [[NSString stringWithFormat:@"%@", fName] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 
      } 
      NSLog(@"Number==>%@ ",number); 
     } 
    } 
    if (fName != NULL) { 
     CFRelease(fName); 
    } 
    if (lName != NULL) { 
     CFRelease(lName); 
    } 
    if (multi != NULL) { 
     CFRelease(multi); 
    } 
} 

[allPeople release]; 

我無法弄清楚這個錯誤。即使如此,它也不能順利運行。

運行構建和分析的代碼部分

ABMultiValueRef multi = ABRecordCopyValue(person , kABPersonPhoneProperty); 
    NSLog(@"Number===>%d" , ABMultiValueGetCount(multi)); 

請幫我來的時候,我甚至讓潛在的內存泄漏。

任何形式的幫助將不勝感激。

在此先感謝

+0

請問你可以把崩潰日誌。它會給在這裏的人提供非常清楚的想法,這將幫助您真正快速地獲得幫助。 – 2011-03-02 11:50:27

+0

最糟糕的部分是應用程序崩潰,沒有任何警告或消息 – devsri 2011-03-02 11:56:49

+0

@devsri:崩潰而不通知用戶是Apple的方式。 – MusiGenesis 2011-03-02 12:05:00

回答

0

感謝您的答覆。我已經找到了解決這個問題的解決方案。我沒有發佈數字變量,認爲引用是作爲引用傳遞的,但它被複制到返回的位置,因此需要在使用後釋放數字。

再次感謝所有回覆!