2010-07-06 100 views
-1

問題是,我總是在調用phones變量的任何方法上運行時崩潰。 在此版本中,我在1ABMultiValueCopyValueAtIndex)處得到一個錯誤。 如果我會對此行發表評論,代碼會在2ABMultiValueGetCount)上崩潰。 它看起來像屬性是空的。如果我NSLogphones變量。我得到(null)。 我測試iPhone模擬器上的代碼,我有一些虛擬聯繫人有一些電話號碼。 另外firstNamelastName工作就像一個魅力。如何處理iPhone的地址簿上的多個屬性?

for(id person in people){ 
    NSString *firstName = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty); 
    NSString *lastName = (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty); 
    ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty); 
    NSString *phone = (NSString*)ABMultiValueCopyValueAtIndex(phones, 0); /*1*/ 
/*2/ id ph, phLb; 
    for (CFIndex i = 0; i < ABMultiValueGetCount(phones); i++) { 
     phLb = ABMultiValueCopyLabelAtIndex(phones, i); 
     ph = ABMultiValueCopyValueAtIndex(phones, i); 
     NSLog(@"%@,%@", phLb, ph); 
     CFRelease(phLb); 
     CFRelease(ph); 
    } 
*/ 
NSLog(@"%@", firstName); 
NSLog(@"%@", lastName); 
NSLog(@"%@", phones); 
NSLog(@"%@", phone); 

[firstName release]; 
[lastName release]; 
[phone release]; 
[phones release]; 

}

+1

那麼你的問題如何處理null? – slf 2010-07-06 14:10:16

+0

我的問題是,如何從地址簿中獲取數字。數字在那裏,但我不知何故得到空。 – Alistra 2010-07-06 21:30:49

回答

0

代碼:

addressBook = ABAddressBookCreate(); 
people = (NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook); 
CFRelease(addressBook); 

釋放的地址簿和被下文稱從它發行過的所有對象。所以指向MultiValueRefs的指針在使用之前解除分配。

-4

學習如何使用調試器。此外,你的代碼泄漏。

+0

我知道它泄漏。我首先想讓它起作用,然後保留所有變量。 – Alistra 2010-07-06 21:31:43

+0

如果您不知道AddressBook的任何信息,請不要回答問題,tc。謝謝! – 2010-07-06 21:39:08

0

我想你如何採購ABMultiValueRef的假設是錯誤的。我沒有在這臺計算機上使用我的AB代碼,但驗證ABRecordCopyValue是合適的方法。然後研究ABMultiValueRef如何訪問其內容。這是一個完全不同的對象集而不是簡單的字符串。

+0

正如您在評論部分中看到的那樣。我試着用id類型,但也沒有工作。我認爲這個例子幾乎是從蘋果文檔複製粘貼的,即如何使用multiRef部分。我會在工作中檢查明天。 – Alistra 2010-07-06 21:47:21

相關問題