导入AddressBook联系信息,如何处理空字段?

时间:2010-09-10 07:36:46

标签: iphone null abaddressbook

我正在将联系人信息导入某些文本字段,但如果某些字段没有条目(如电话,电子邮件等),则应用会崩溃。

以下是我的文字字段:

    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

*****更新*****

使用以下代码结束:

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

1 个答案:

答案 0 :(得分:2)

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