2012-12-11 84 views
1

我需要從通訊錄獲取記錄。我使用ABPeoplePickerNavigationController來做到這一點。在獲取記錄的同時,我正在將檢查條件檢查記錄是否存在。 例如要檢查有我使用下面的代碼從通訊簿獲取記錄時應用程序崩潰

NSString *fname; 
CFTypeRef fnameProperty = ABRecordCopyValue(person, kABPersonFirstNameProperty); 
if (ABRecordCopyValue(person, kABPersonFirstNameProperty)) { 
    fname = (__bridge NSString*)fnameProperty; 
} 
else{ 
    fname = @""; 
} 

的代碼完全適用於kABPersonFirstNameProperty名字。

但是,當我使用下面的代碼段檢查電子郵件財產

ABMultiValueRef emailProperty = ABRecordCopyValue(person, kABPersonEmailProperty); 
NSLog(@"%@",emailProperty); 
NSString *email; 
if (ABRecordCopyValue(person, kABPersonEmailProperty)) { 
    email = (__bridge NSString*)ABMultiValueCopyValueAtIndex(emailProperty, 0); 
} 
else { 
    email = @""; 
} 

我的應用程序崩潰,如果kABPersonEmailProperty是零(沒有存儲的人沒有email屬性)

有人可以解釋我爲什麼會這樣呢?

謝謝

+0

請張貼顯示 –

+0

@Dpk錯誤的錯誤是 EXC_BAD_ACCESS(代碼= 2,地址=爲0x0) –

回答

4

這是我的工作版本,看看這個工程。

//Email 
NSString* email = nil; 
ABMultiValueRef emailNum = ABRecordCopyValue(person, 
               kABPersonEmailProperty); 
if (ABMultiValueGetCount(emailNum) > 0) { 
    email = (__bridge_transfer NSString*) 
    ABMultiValueCopyValueAtIndex(emailNum, 0); 
} else { 
    email = @""; 
} 
+0

謝謝山姆,這個代碼可以正常使用。 –

+0

你能解釋我的代碼有什麼問題嗎? –

+0

您的if語句不檢查是否存在電子郵件。 – Sam

相關問題