【问题标题】:Adding phone number and email to addressbook gives crash in iPhoneApp将电话号码和电子邮件添加到地址簿会导致 iPhone 应用程序崩溃
【发布时间】:2012-01-03 12:27:11
【问题描述】:
ABRecordSetValue(person, kABPersonPhoneProperty, (__bridge CFTypeRef)phoneNum, nil);
ABRecordSetValue(person, kABPersonEmailProperty, (__bridge CFTypeRef)eMailId, nil);

评论这两行给出了正确的输出(将条目保存到 AdressBook,没有电子邮件和电话条目)。 但是,在执行过程中它会失败并使程序崩溃。

变量的值是:

电话号码:000-000-0000

eMailId:AbcdefghIjklm@qwertyuiopasdfghjk.com

错误类型:EXC_BAD_ACCESS

有什么想法吗? 还是需要更多信息??

【问题讨论】:

  • 您能否提供详细信息。您实际上想做什么..?

标签: iphone objective-c ios abaddressbook


【解决方案1】:

看看你定义变量的位置和类型会很好。您可能还在这些行之前发布了通讯录。 (例如CFRelease(multiPhone);) 据我所知,phoneNumemailID 应该是ABMutableMultiValueRef。至少我是这样做的:

添加单个电话号码

ABMutableMultiValueRef multiPhone = ABMultiValueCreateMutable(kABMultiStringPropertyType);

ABMultiValueAddValueAndLabel(multiPhone, [self.contact telephone], kABPersonPhoneMobileLabel, NULL);            
ABRecordSetValue(person, kABPersonPhoneProperty, multiPhone,nil);

添加电子邮件:

    ABMutableMultiValueRef multiEmail = ABMultiValueCreateMutable(kABMultiStringPropertyType);
    ABMultiValueAddValueAndLabel(multiEmail, @"abc@abc.com", kABWorkLabel, NULL);
    ABRecordSetValue(person, kABPersonEmailProperty, multiEmail, &error);
    CFRelease(multiEmail);

更多信息Address Book tutorial

希望这会有所帮助。

【讨论】:

  • 我只需要设置一个电话号码和一个邮件ID。我把它们都取为 NSString* 类型,然后将它们转换为 CFStringRef。
  • 编辑了我的答案。但是邮件ID是什么意思?不同于邮件地址的东西?
  • 地址簿教程死链接
【解决方案2】:

试试这个

ABAddressBookRef addressBook = ABAddressBookCreate(); 

ABRecordRef person = ABPersonCreate(); 


ABMutableMultiValueRef phoneNumberMultiValue 

=ABMultiValueCreateMutable(kABPersonPhoneProperty);

//phoneNumber is the number to be save in Address Book


ABMultiValueAddValueAndLabel(phoneNumberMultiValue ,phoneNumber,kABPersonPhoneMobileLabel, NULL);

//EmailId is the emailId to be save in Address Book

ABMultiValueAddValueAndLabel(phoneNumberMultiValue ,EmailId,kABPersonPhoneMobileLabel, NULL);

ABRecordSetValue(person, kABPersonPhoneProperty, phoneNumberMultiValue,nil); 

// set the phone number property

ABAddressBookAddRecord(addressBook, person, nil); 

ABAddressBookSave(addressBook, nil); 

CFRelease(person); 

希望对你有帮助...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多