2010-09-10 52 views
0

我導入聯繫人信息到一些文本框,但應用程序崩潰,如果有某些方面的任何條目,如電話,電子郵件等導入地址簿聯繫信息,如何處理空字段?

這裏是我的文本框:

First Name 
    Middle Name 
    Last Name 

    Main Phone 
    Mobile Phone 

    Email Address 

    Website 

假設所選聯繫人不會有第二個電話號碼(在這種情況下爲手機),或者沒有該聯繫人的URL條目。該應用程序崩潰。

*ABMutableMultiValueRef phoneMulti = ABRecordCopyValue(person, kABPersonPhoneProperty); 
NSMutableArray *phones = [[NSMutableArray alloc] init]; 
int i; 
for (i = 0; i < ABMultiValueGetCount(phoneMulti); i++) { 
    NSString *aPhone = [(NSString*)ABMultiValueCopyValueAtIndex(phoneMulti, i) autorelease];   
    [phones addObject:aPhone]; 
} 

accountPhone1TextField.text = [phones objectAtIndex:0]; 
accountPhone2TextField.text = [phones objectAtIndex:1]; 
CFRelease(phoneMulti); 
[phones release];* 

或者,如果我試圖從該聯繫人的電子郵件地址,它不存在,這將崩潰:

NSString *anEmail = [(NSString*)ABMultiValueCopyValueAtIndex(emailMulti, i) autorelease]; 
//Variable is not a CFString 

***** UPDATE *****

結束了使用下面的代碼:

ABMutableMultiValueRef emailMulti = ABRecordCopyValue(person, kABPersonEmailProperty); 
NSMutableDictionary *myEmailDict = [NSMutableDictionary dictionaryWithCapacity:ABMultiValueGetCount(emailMulti)]; 
for (CFIndex i = 0; i < ABMultiValueGetCount(emailMulti); i++) { 
    emailLabel = ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(emailMulti, i)); 
    email = ABMultiValueCopyValueAtIndex(emailMulti, i); 
    [myEmailDict setObject:(NSString*)email forKey:(NSString*)emailLabel]; 
    CFRelease(email); 
    CFRelease(emailLabel); 
} 

回答

2
if (phones.count > 0) { 
    accountPhone1TextField.text = [phones objectAtIndex:0]; 
} 
if (phones.count > 1) { 
    accountPhone2TextField.text = [phones objectAtIndex:1]; 
} 
+0

我試過了..但是NSString * anEmail = [(NSString *)ABMultiValueCopyValueAtIndex(emailMulti,i)autorelease];崩潰,因爲沒有電子郵件地址 – WrightsCS 2010-09-10 08:55:55

+0

你使用kABPersonEmailProperty? – LarsJK 2010-09-10 09:54:25

+1

是的,但由於某些原因,如果沒有電子郵件字段的記錄...它會導致崩潰。 – WrightsCS 2010-09-10 22:34:08

相關問題