gpt4 book ai didi

ios - AB地址簿崩溃 CFStringRef

转载 作者:行者123 更新时间:2023-11-28 19:59:59 28 4
gpt4 key购买 nike

我有一个应用程序可以获取用户地址簿中的名字和姓氏。我已经在模拟器和我自己的运行 iOS 7 和 XCode 5 的 iPhone 4S 上进行了测试,它运行良好。

最近,一些国际用户一直在提示我的应用程序在他们身上不断崩溃。幸运的是,我能够从 iTunes 下载崩溃日志,当我对其进行符号化时,我发现该应用程序在接下来的步骤中至少有一个用户崩溃了。我问用户他们的地址簿有什么特别之处,他提到他有一些英文、希伯来文的名字。我的问题是为什么它会在那条线上崩溃?是不是 CFStringRef 是一个敏感变量,我应该改用其他变量?我这辈子都弄不明白。

崩溃日志:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x000000005152dca8
Triggered by Thread: 0

Thread 0 Crashed:
0 AppSupport 0x3237642d CPRecordGetProperty + 21
1 AppSupport 0x323765c1 CPRecordCopyProperty + 9
2 AddressBook 0x2e154457 ABRecordCopyValueUnfiltered + 79
3 AddressBook 0x2e1542f7 ABRecordCopyValue + 79
4 Contacts HD 0x0008a583 -[v1AddressBookTblController getValsForTable] (v1AddressBookTblController.m:147)

代码:

- (IBAction) getValsForTable
{

ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);

ABRecordRef source = ABAddressBookCopyDefaultSource(addressBook);
CFArrayRef allPeopleArray;


allPeopleArray = ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source, kABPersonSortByLastName);


CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);

//NSLog(@"Start LOOP");
for (int i=0; i<nPeople; i++)
{
//NSLog(@"Inside Loop %i", i);

ABRecordRef ref = CFArrayGetValueAtIndex(allPeopleArray, i);

//CRASH HAPPENS HERE
CFStringRef firstNameStr = ABRecordCopyValue(ref, kABPersonFirstNameProperty);

...

尝试在地址簿中使用非 ASCII 名字,应用程序仍然可以正常工作。

enter image description here

最佳答案

我有同样的错误,问题是:

CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source, kABPersonSortByFirstName);

CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);

给出了不同数量的联系人(所以在你的情况下 nPeople 可能比 allPeople 大,这会导致崩溃)。 source 似乎没有给出地址簿中的所有联系人。将其更改为 nil 为我解决了这个问题。另外,为了确保我会这样做:

nPeople = CFArrayGetCount(allPeople);

Jokinryou Tsui 在这篇文章中解释了解决方案:ABAddressBookCopyArrayOfAllPeople 和 ABAddressBookGetPersonCount 返回不同的大小

(这是我的第一篇文章,所以我不确定我是否违反了任何规则或遵循了正确的程序。希望答案对您有所帮助!)

关于ios - AB地址簿崩溃 CFStringRef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24618171/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com