添加联系人会抛出大多数属性的EXC_BAD_ACCESS异常(ABRecord)

时间:2010-02-06 21:35:22

标签: iphone

使用标准添加记录代码我在设置FirstName和Organization以外的属性时遇到了一个非常奇怪的错误(前两行有效):

ABRecordSetValue(person, kABPersonFirstNameProperty, location.title , nil);
ABRecordSetValue(person, kABPersonOrganizationProperty, location.title , nil);
ABRecordSetValue(person, kABPersonPhoneProperty, [location telephone], nil);
ABRecordSetValue(person, kABPersonAddressStreetKey, [location addressLine1], nil);
ABRecordSetValue(person, kABPersonAddressCityKey, [location addressTownCity], nil);
ABRecordSetValue(person, kABPersonAddressZIPKey, [location addressPostcode], nil);
ABRecordSetValue(person, kABPersonAddressStateKey, [location addressCounty], nil);

仅供参考,它不是location.title和[location addressLine1]之间的区别,因为我尝试将kABPersonAddressStreetKey设置为具有相同问题的location.title

即使使用此代码,我也会获得EXC_BAD_ACCESS

ABAddressBookRef addressBook = ABAddressBookCreate();
ABRecordRef person = ABPersonCreate();
ABRecordSetValue(person, kABPersonFirstNameProperty, location.title , nil);
ABRecordSetValue(person, kABPersonPhoneProperty, @"0208 1567890", nil);
ABAddressBookAddRecord(addressBook, person, nil);
ABAddressBookSave(addressBook, nil

电话线的原因,我一定要做一些愚蠢的事情!?!?!?

3 个答案:

答案 0 :(得分:1)

检查Finding EXC_BAD_ACCESS bugs in a Cocoa project中提供的提示。

在这种情况下,同样有用的是Debugging Applications

中解释的NSZombieEnabled功能

答案 1 :(得分:0)

您是否尝试使用调试器调试该特定代码行以打印出位置变量的值?

或者至少将该变量的值记录到NSLog()。

<强>编辑:

在这种情况下,我猜位置变量不响应选择器方法。

尝试“走进”第3行,看看会发生什么?

答案 2 :(得分:0)

啊,似乎是因为电话和地址字段是多值的,我还没有意识到这个

可以找到更多细节

http://www.modelmetrics.com/tomgersic/iphone-programming-adding-a-contact-to-the-iphone-address-book/